注:本文很多部分知识来自于蒋金楠老师的<ASP.NET MVC框架解密>,本人写纯粹是用作个人笔记,假如侵犯了您的权益,请联系我,我立刻删除
在ASP.NET MVC中URL路由通过对请求的URL进行解析,得到以Controller和Action名称为核心的路由数据。但是URL路由系统并不是专属于ASP.NET MVC的,而是直接建立在ASP.NET上,在System.Web.Routing 命名空间下,所以WebForm也可以使用路由对请求地址与物理文件的分离。
好的Url应该满足如下条件:
- URL应为获取某种资源提供信息,不一定是物理文件路径
- 简短易于记忆和拼写输入
- 可以反映出站点结构
- 应该是【可拆分】,用户移除末尾,进而获取公告层次信息
- 持久、不应改变
当一个请求Url过来的时候,首先
去App_Start文件夹的RouteConfig.cs里面,静态方法RegisterRoutes,有routes.MapRoute方法
这些方法就是一条条路由规则,你的请求url进来的话,会到这些路由规则从上向下匹配,直到匹配到合适的路由为止。
下面我们解析一下这些路由规则
routes.MapRoute(
name: "Default5", //这个是路由规则的名字
url: "{controller}/{action}/{id}", //带参数的URL
defaults: new { controller = "Test", action = "TestIndex",id=UrlParameter.Optional} //该路由参数的默认值(假如你在地址栏只输出http://localhost:/,那么会自动访问这个默认的控制器Test下面的TestIndex方法,如:http://localhost/Test/TestIndex,然而id是UrlParameter.Optional表示为可选的参数即可有可无)
);
除了我们一般惯例的 http://localhost/Test/TestIndex/1这个URL格式,我们还可以利用路由进行修改变成 http://localhost/Test-TestIndex-1
routes.MapRoute(
name: "Default5", //这个是路由规则的名字
url: "{controller}-{action}-{id}", //带参数的URL
defaults: new { controller = "Test", action = "TestIndex",id=UrlParameter.Optional} //但是除了用"/"这个id是可选的,如果使用"-",则id必须填写
我们还可以在{controller}控制器前面加一个常量例如:admin
routes.MapRoute(
name: "Default5", //这个是路由规则的名字
url: "admin/{controller}/{action}/{id}", //带参数的URL
defaults: new { controller = "Test", action = "TestIndex",id=UrlParameter.Optional}