学习ASP.NET MVC路由的使用方法
创始人
2024-04-19 10:10:14
0

这里,我们将学习到mvc中一个重要的特性即asp.net routing。这个模块用来把用户的请求映射到特定的mvc controller actions,看完这篇将可以知道标准路由表是怎么把请求映射到controller action的。

使用默认ASP.NET MVC路由表

当创建好一个mvc应用后,应用已经被配置好可以用asp.net routing了。ASP.NET MVC路由在两个地方被激发。

一、asp.net routing在web.config中被激活,有关route的配置有四个配置节:system.web.httpModules , system.web.httpHandlers , system.webserver.modules, the system.webserver.handlers,删除这些配置节时要小心,因为没有它们routing将不再工作。

二、更重要的是,在global.asax文件中已经创建了路由表,global.asax是一个包含了asp.net应用生命周期内事件句柄的特殊文件。路由表在Application Start 事件中被创建。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.Mvc;  
  6. using System.Web.Routing;  
  7.  
  8. namespace MvcApplication1  
  9. {  
  10.     // Note: For instructions on enabling IIS6 or IIS7 classic mode,   
  11.     // visit http://go.microsoft.com/?LinkId=9394801  
  12.  
  13.     public class MvcApplication : System.Web.HttpApplication  
  14.     {  
  15.         public static void RegisterRoutes(RouteCollection routes)  
  16.         {  
  17.             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  18.  
  19.             routes.MapRoute(  
  20.                 "Default",                                              // Route name  
  21.                 "{controller}/{action}/{id}",                           // URL with parameters  
  22.                 new { controller = "Home", action = "Index", id = "" } // Parameter defaults  
  23.             );  
  24.  
  25.         }  
  26.  
  27.         protected void Application_Start()  
  28.         {  
  29.             RegisterRoutes(RouteTable.Routes);  
  30.         }  
  31.     }  
  32. }  

当程序运行后,Application_Start() 方法被调用,同时调用方法内的RegisterRoutes() 方法。这个方法创建了路由表。

默认的ASP.NET MVC路由表中只含有一个叫做default的路由。这个默认路由把url拆分成三个部分分别对应controller,action和View。

当请求URL:/Home/Index/3时,下列代码执行:HomeController.Index(3)。

如果不指定controller,则默认为Home,不指定Action则默认为Index,不指定参数则默认为空。

我们将通过例子来看一下到底默认路由是怎么把URl映射到controller和action的。想象我们在地址栏中输入了如下URL:

/Home

由于默认action为Index,所以下面的方法被调用

  1. using System.Web.Mvc;  
  2.  
  3. namespace MvcApplication1.Controllers  
  4. {  
  5.     [HandleError]  
  6.     public class HomeController : Controller  
  7.     {  
  8.         public ActionResult Index(string id)  
  9.         {  
  10.             return View();  
  11.         }  
  12.     }  
  13. }  

这个方法接受一个字符串类型的id参数,上面的URL执行了这个方法,传入一个空的id。

由于mvc框架引用controller actions的方式,/Home同时也会触发下列事件

  1. using System.Web.Mvc;  
  2.  
  3. namespace MvcApplication1.Controllers  
  4. {  
  5.     [HandleError]  
  6.     public class HomeController : Controller  
  7.     {  
  8.         public ActionResult Index()  
  9.         {  
  10.             return View();  
  11.         }  
  12.     }  
  13. }  

这个方法不接受参数,/Home将触发这个Index(),同时/Home/Index/3也会调用这个方法,id参数将被忽略。

/Home也会与下面的方法匹配

  1. using System.Web.Mvc;  
  2.  
  3. namespace MvcApplication1.Controllers  
  4. {  
  5.     [HandleError]  
  6.     public class HomeController : Controller  
  7.     {  
  8.         public ActionResult Index(int? id)  
  9.         {  
  10.             return View();  
  11.         }  
  12.     }  
  13. }  

该方法接受一个int类型的参数id,因为这个参数可以为null,该方法将被调用而不会产生任何错误。

***调用下面的方法,这里会引发一个异常

  1. using System.Web.Mvc;  
  2.  
  3. namespace MvcApplication1.Controllers  
  4. {  
  5.     [HandleError]  
  6.     public class HomeController : Controller  
  7.     {  
  8.         public ActionResult Index(int id)  
  9.         {  
  10.             return View();  
  11.         }  
  12.     }  
  13. }  

因为这个参数是不可以为null的。以上就介绍了ASP.NET MVC路由的使用方法。

【编辑推荐】

  1. 浅析ASP.NET中的URL Rewrite
  2. 浅谈ASP.NET MVC框架
  3. 介绍ASP.NET MVC中的MvcAjaxPanel
  4. ASP.NET MVC框架拯救UpdatePanel
  5. 用ASP.NET MVC源代码寻找解决方案

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...