自定义路由规则的要求,小范围写在前,大范围写在后。
路由规则可以注册多条,
路由规则的名称不能重复
路由规则有顺序,并且按照顺序进行匹配,建议小范围写在前,大范围写在后。
路由规则可以设置约束 即正则表达式
路由规则匹配的控制器可以设置命名空间约束

routes.MapRoute(
name: "NewShow",
url: "{year}-{month}-{day}-{id}",
defaults: new { controller = "News", action = "Show" },
constraints:new
{
year=@"^\d{4}$",
month = @"^\d{1,2}$",
day = @"^\d{1,2}$"
}
);

routes.MapRoute(
// 1.参数name设置路由规则的名称必须是唯一的,重复会报异常默认添加”Default”的路由规则
name: "Default",
//2.参数url设置url的路由规则,可变的值使用{}括起来关键字controller、action名称不可变
url: "{controller}/{action}/{id}",
//3.参数defaults设置路由规则中参数的默认值类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数参数UrlParameter.Optional表示可选的只读参数如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

路由中的几个对象:
1.路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式,默认值,处理器三个值。代码如下:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

2. 路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过RouteData.GetRequestString("controller/action")获取本些请求中控制或行为的真实名称

3.路由集合RouteCollection:存放路由规则的集合Collection<RouteBase>,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
4.路由表RouteTable:类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册

客户的请求过程为:
当一个客户请求过来时,HttpContext请求到RouteCollection中去RouteTable中的第个键值对的Route比对 如果有一个比对路由规则比对成功,则生成一条RouteData数据进而跳转到对应Cotroller的Action中去进行相应的处理。

routes.MapRoute(
// 1.参数name设置路由规则的名称必须是唯一的,重复会报异常默认添加”Default”的路由规则
name: "Default",
//2.参数url设置url的路由规则,可变的值使用{}括起来关键字controller、action名称不可变
url: "{controller}/{action}/{id}",
//3.参数defaults设置路由规则中参数的默认值类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数参数UrlParameter.Optional表示可选的只读参数如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);路由的调试,在我们开发的 时候可以使用RouteDeugger进行路由的调试,看我们写的路由有没有启作用,用法 如下把RouteDebug.dll添加引用,在Global.asax.cs中注册路由之后 添加 RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);

MVC之路由规则 (自定义,约束,debug)的更多相关文章

  1. C# MVC ( 添加路由规则以及路由的反射机制 )

    在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开   (1) 约束的规则 从上往下 贪婪性   (2) 用 routes.MapRoute(...) 添加   ...

  2. Asp.Net MVC part3 路由Route

    路由Route路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式.默认值.处理器三个值路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过 ...

  3. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  4. MVC 5 属性路由中添加自己的自定义约束

    介绍约束 ASP.NET MVC和web api 同时支持简单和自定义约束,简单的约束看起来像: routes.MapRoute("blog", "{year}/{mon ...

  5. vs2017 mvc 自定义路由规则 出现 404.0 错误代码 0x80070002

    自定义: WebApiConfig  里面最后增加 config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttp ...

  6. MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则

    MVC路由:由于路由global中注册了,在程序第一次运行时,在MVC会自动生成路由,类似于字典的格式缓存下来,但路由生成的规则又是怎样的呢? 路由生成规则是: 1>更具你定义的的顺序查找路由规 ...

  7. 【基础】MVC路由规则

    一.RouteData解析过程 在ASP.NET MVC中,服务器收到来自客户端的请求后,会经过一些列的处理拿到请求的数据,比如在Pipeline 管线事件中,通过订阅适当的事件,将HttpConte ...

  8. MVC 路由规则

    一.路由规则说明 先来看MVC中的默认路由的说明 "{controller}/{action}/{id}", // URL with parameters 对于Url /Home/ ...

  9. 第二十一节:Asp.Net Core MVC和WebApi路由规则的总结和对比

    一. Core Mvc 1.传统路由 Core MVC中,默认会在 Startup类→Configure方法→UseMvc方法中,会有默认路由:routes.MapRoute("defaul ...

随机推荐

  1. JavaScript知识点

    Day 01 1.Javascript 概述 1.什么是Javascript (JS) Javascript 是一种运行于 JS解释器/引擎 中的解释型脚本语言 JS解释器/引擎 :JS运行环境 1. ...

  2. 【引】runtime全解析,P1:Programming Guide

    h2.Overview Objective-C language defers as many decisions as it can from compile time and link time ...

  3. android-APP-bluetooth

    1.创建工程项目 2.工程界面(教程3) 如下目录所示:src目录下MainActivity.java是程序:res下面都是图标等资源文件,layout下的activity_main.xml是按钮等界 ...

  4. range(start,end,step)与xrange(start, stop[, step])

    >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> xrange(10) xrange(10) >>> ...

  5. Docker 容器部署 Consul 集群

    Docker 容器部署 Consul 集群 一.docker安装与启动1.1安装docker[root@localhost /]# yum -y install docker-io 1.2更改配置文件 ...

  6. Assembler : The Basics In Reversing

    Assembler : The Basics In Reversing Indeed: the basics!! This is all far from complete but covers ab ...

  7. Uva11292--------------(The Dragon of Loowater)勇者斗恶龙 (排序后贪心)

    ---恢复内容开始--- 题目: Once upon a time, in the Kingdom of Loowater, a minor nuisance turned into a major ...

  8. 升级Win2010后, 打开SQL2008 附加数据库提示 5120错误

    在win2010系统上使用sql2008进行附加数据库(包括在x86系统正在使用的数据库文件,直接拷贝附加在X64系统中)时,提示无法打开文件,5120错误. 这个错误是因为没有操作权限,所以附加的时 ...

  9. IIS7.5下发布应用程序备忘

    近期工作需要把应用程序发布升级到IIS7.5中,IIS7部署方式跟IIS6差别还是挺大的. 部署常规方式:新建虚拟目录>转成应用程序. 在本机用http://localhost/别名访问一切正常 ...

  10. Easyui 小脚本

    function addTab(subtitle, url, icon) { if (!$('#tabs').tabs('exists', subtitle)) { $('#tabs').tabs(' ...