首页 > 代码库 > MVC - Routing - 网址路由

MVC - Routing - 网址路由

1. Routing  : 路由 

  主要是比对通过浏览器传来的http要求与响应适当的网址给浏览器。

?
1
@Html.ActionLink("关于","About","Home")

  这段代码生成的HTML超连接:

?
1
<a href=http://www.mamicode.com/"/Home/About">关于</a>

  

2. 默认情况下 网址路由规则定义在 App_Start\RouteConfig.cs文档中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace MvcApplication3
{
    public class RouteConfig
    {
        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 }
            );
        }
    }
}

 1.1 所有的ASP.NET Web 应用程序的路口点都是在 HttpApplication 的Application_Start()中。

  其中 RouteTable.Routes是一个公开的静态对象。用来保存所有的网址路由规则集合 (RouteCollection)。

     在ASP.NET MVC 中 程序会从Global.asax中的 Application_Start() 事件加载一下方法。 

  RouteConfig.RegisterRoutes(RouteTable.Routes); 就是在加载网络路由地址

?
1
2
3
4
5
6
7
8
9
10
11
12
public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
 
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

  

1.2 RegisterRoutes 中的IgnoreRoute 方法,是用来定义不要通过网址路由处理的网址,该方法的第一个参数就是设置“不要 通过网址路由处理的URL样式”。

?
1
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  所谓的"不要通过网址路由处理的网址" 就是:如果今天客户端浏览器传送过来的网址在这一条规则比对成功,那么就不会再通过网址路由继续比对下去。

1.3 IgnoreRoute 方法中的第一个参数 “resource”。代表RouteValue路由变量,可以取任意值

 {resource}.axd代表所有的*.axd文档网址。所有的.axd文档通常都代表着其中一个HttpHandler .就如.ashx文件一样。

 

1.4 IgnoreRoute 方法中的第一个参数中还有一个{*pathInfo}参数。也是一个 RouteValue路由变量。

  *pathInfo代表抓取全部的意思。

  完整的 地址 "{resource}.axd/{*pathInfo}"  举个例子:

  若网址为 /WebResource.axd/a/b/c/d 的话, {resource}.axd 就会比对WebResource.axd。

     而{*pathInfo}就会得到啊 a/b/c/d, 如果去掉* 号就只能得到 a.

1.5  MapRoute。是用来定义网址路由扩充的。

    MapRoute方法的指定参数方式 已改为  ”具名参数“ 。

?
1
2
3
4
5
6
7
private void Me(int x, int y = 6, int z = 7)
       {
           //....
       }
  Me(1, 2, 3);// 标准调用
  Me(1, 5);//  等同与 Me(1,5,7) ,Z已经定义
  Me(1);//也可以

  name :参数第一Route 名称 ,在此为 “Default”.

  url : 具名参数定义。 {controller}/{action}/{id}

    定义URL样式包含三个路由参数分别为controller ,action,id

    如果输入网址 /Home/About/123, 就对应以上三个值 

    Default 具名参数 的默认值,当网址路由比对不到 http要求的网址时会尝试带入这里定义的默认值。

?
1
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }