第9章 路由(Route)

来源:互联网 发布:new event js 位置 编辑:程序博客网 时间:2024/06/01 08:58

将URl映射到控制器上的操作方法.

路由只是解析输入请求、并填充存储在当前RequestContext(请求上下文)中的一个RouteData实例。

一、 统一资源定位符——URL

二、 路由概述

1 、对比路由和URL重写
路由:匹配传入URL用到的映射规则,生成URL,映射到资源.
URL重写:把旧URL映射到新的URL
2 、路由方法
3 、定义特性路由 

ASP.NET MVC5中新增的。
(1)、路由URL
Global.asax.cs文件中Application_Start方法中调用了RegisterRoutes方法。
这个方法是集中控制路由的方法,包含在~/App_Start/RouteConfig.cs文件中。
修改:
    public class RouteConfig    {        public static void RegisterRoutes(RouteCollection routes)        {            //启用特性路由            routes.MapMvcAttributeRoutes();        }    }
路由的核心工作是将一个请求映射到一个操作。
        //首页通过/,/home和/home/index        [Route("")]        [Route("home")]        [Route("home/index")]        public ActionResult Index()        {            return View();        }        //URL为/about的请求        [Route("about")]        public ActionResult About()        {            return View();        }

(2)、路由值

        //URL为/person/1的请求        [Route("person/{id}")]        public ActionResult Details(int id)        {            return View();        }        [Route("{year}/{month}/{day}")]        public ActionResult Index(string year,string month,string day)        {            return View();        }

(3)、控制器路由

    public class HomeController : Controller    {        [Route("home/index")]        public ActionResult Index()        {            return View();        }        [Route("home/about")]        public ActionResult About()        {            return View();        }    }
在控制器类上定义路由时,可以使用一个叫做action的特殊路由参数,它可以作为任意操作名称的占位符。
    [Remote("home/{action}")]    public class HomeController : Controller    {        public ActionResult Index()        {            return View();        }            public ActionResult About()        {            return View();        }    }

重写默认路由

    [Remote("home/{action}")]    public class HomeController : Controller    {        //操作方法级别的路由特性,会覆盖控制器级别路由特性        [Remote("home")]        [Remote("home/index")]        public ActionResult Index()        {            return View();        }            public ActionResult About()        {            return View();        }    }
(4)路由约束

 路由约束可以让你指定参数的类型以及范围等,格式为:{参数:约束},举例如下:

// 匹配: /users/5

[Route("users/{id:int}"]

// 这里约束了参数“id”必须为整数类型

public ActionResult GetUserById(int id) { ... }


  下面是支持的路由约束列表:

  • alpha,必须为大小写字母(a-z,A-Z),如:{x:alpha};

  • bool,必须为布尔值,如:{x:bool}

  • datetime,必须为DateTime(时间和日期)类型,如:{x:datetime}

  • decimal,必须为decimal类型,如:{x:decimal}

  • double,必须为64bit浮点数,如:{x:double}

  • float,必须为32bit浮点数,如:{x:float}

  • guid,必须为GUID,如:{x:guid}

  • int,必须为32bit整数,如:{x:int}

  • length,字符串长度必须为指定值或者在指定范围内,如:{x:length(6)} {x:length(1,20)}

  • long,必须为64bit整数,如:{x:long}

  • max,小于等于指定值的整数,如:{x:max(10)}

  • maxlength,字符串长度小于等于指定值,如:{x:maxlength(10)}

  • min,大于等于指定值的整数整数,如:{x:min(10)}

  • minlength,字符串长度大于等于指定值,如:{x:minlength(10)}

  • range,必须是给定范围内的整数,如:{x:range(10,50)}

  • regex,必须与正则表达式匹配,如:{x:(^\d{3}-\d{3}-\d{4}$)}


  你可以在一个参数后面应用多个约束,用冒号分隔它们,如下:

// 匹配: /users/5

// 但是不匹配 /users/10000000000 因为id的值已经超过了int.MaxValue,

// 也不匹配 /users/0 因为后面有个min(1)约束,id 的值必须大于等于 1.

[Route("users/{id:int:min(1)}")]

public ActionResult GetUserById(int id) { ... }


  值得注意的是加在可选参数上的约束,例如:

// 匹配: /greetings/bye

// 也匹配 /greetings 因为message是可选参数,

// 但是不匹配 /greetings/see-you-tomorrow 因为有maxlength(3)约束.

[Route("greetings/{message:maxlength(3)?}")]

public ActionResult Greet(string message) { ... }


4 、定义传统路由


深入理解ASP.NET MVC(1)

ASP.NET MVC 请求流程:Route

5 、选择特性路由还是传统路由
6 、路由命名
7 、MVC区域 
8 、catch-all参数
9 、段中的多个路由参数
10 、StopRoutingHandler和IgnoreRoute
11 、路由的调试
三、 揭秘路由如何生成URL
1 、URL生成的高层次概述
2 、URL生成详解
3 、外界路由值
4 、Route类生成URL的若干示例
四、 揭秘路由如何绑定到操作
1 、高层次请求的路由管道
2、 路由数据
五、 自定义路由约束
六、 Web Forms和路由机制
七、 小结
原创粉丝点击