你的位置:首页 > ASP.net教程

[ASP.net教程]ASP.NET MVC 路由机制


     传统的ASP.NET web form 是假想,用户请求的URL和服务器上面的文件之间有某种关联,这里,服务器的工作就是根据接收到的用户请求,检索到对应的文件给用户。这种方式在web form时代很适合,因为ASP.NET页面是aspx页面,并且能够独立的回复用户的浏览器请求。   

      但是这中方式在MVC中不合适,在MVC中用户请求是通过控制器里面的方法来处理的,在MVC中没有ASP.NET,一对一的文件关联关系;为了解决这个问题,我们要学会MVC路由机制。

 路由机制有两个功能:

1.检查收到的URL请求,来判断这个请求是要请求哪个控制器哪个方法的;

2.生成外部URL(用户点击某个链接的时候,会有一个请求,通过视图展现在浏览器上面的URL)

现在我们来开始学MVC路由配置吧:

在MVC 框架中,有两种方式创建路由:

1.基于约定的路由配置

2.特定的路由配置

你可能已经很熟悉了基于约定的路由配置,但是特定的路由配置是MVC5中新增加的。我们在这里都会学习

路由机制不知道,什么是(Controller)控制器,什么是(Actions)方法,它只是提取URL片段,路由的请求处理在后面的处理中,当满足路由配置的时候,才能得到请求的页面;

默认的,路由会匹配拥有正确的片段的URL,例如{controller}/{action},会匹配有两个片段的URL

URL模式是保守的,只会匹配拥有同样的片段的URL,但是URL模式又是包容的,只要URL有正确的片段,就会检查片段的值,但不论值是啥。

 

路由配置是在RouteConfig.cs文件中的;

public static void RegisterRoutes(RouteCollection routes)    {      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");      routes.MapRoute(        name: "Default",        url: "{controller}/{action}/{id}",        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }                      );      routes.MapRoute(        name: "Student",        url: "student/{id}",        defaults: new { controller = "Student", action = "Index"},
         constraints: new { id = @"\d+" }
); }

 

RegisterRoutes这个静态方法在Global.asax文件中被调用,程序每次运行的时候,会执行Global文件中的Application_Start()方法,进行路由注册;
 protected void Application_Start()    {            AreaRegistration.RegisterAllAreas();      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);      RouteConfig.RegisterRoutes(RouteTable.Routes);      BundleConfig.RegisterBundles(BundleTable.Bundles);    }