MVC之路由规则 (自定义,约束,debug)
自定义路由规则的要求,小范围写在前,大范围写在后。
路由规则可以注册多条,
路由规则的名称不能重复
路由规则有顺序,并且按照顺序进行匹配,建议小范围写在前,大范围写在后。
路由规则可以设置约束 即正则表达式
路由规则匹配的控制器可以设置命名空间约束
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)的更多相关文章
- C# MVC ( 添加路由规则以及路由的反射机制 )
在项目文件夹下找到 App_Start 下 找到 RouteConfig.cs文件 打开 (1) 约束的规则 从上往下 贪婪性 (2) 用 routes.MapRoute(...) 添加 ...
- Asp.Net MVC part3 路由Route
路由Route路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式.默认值.处理器三个值路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...
- MVC 5 属性路由中添加自己的自定义约束
介绍约束 ASP.NET MVC和web api 同时支持简单和自定义约束,简单的约束看起来像: routes.MapRoute("blog", "{year}/{mon ...
- vs2017 mvc 自定义路由规则 出现 404.0 错误代码 0x80070002
自定义: WebApiConfig 里面最后增加 config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttp ...
- MVC路由学习:自定义路由参数(用户看不到参数名),重新定义路由规则
MVC路由:由于路由global中注册了,在程序第一次运行时,在MVC会自动生成路由,类似于字典的格式缓存下来,但路由生成的规则又是怎样的呢? 路由生成规则是: 1>更具你定义的的顺序查找路由规 ...
- 【基础】MVC路由规则
一.RouteData解析过程 在ASP.NET MVC中,服务器收到来自客户端的请求后,会经过一些列的处理拿到请求的数据,比如在Pipeline 管线事件中,通过订阅适当的事件,将HttpConte ...
- MVC 路由规则
一.路由规则说明 先来看MVC中的默认路由的说明 "{controller}/{action}/{id}", // URL with parameters 对于Url /Home/ ...
- 第二十一节:Asp.Net Core MVC和WebApi路由规则的总结和对比
一. Core Mvc 1.传统路由 Core MVC中,默认会在 Startup类→Configure方法→UseMvc方法中,会有默认路由:routes.MapRoute("defaul ...
随机推荐
- Unity3D入门
Unity3D是一款应用广泛的3D游戏引擎,本文主要介绍unity3D的简单应用,安装过程略过. 在游戏的整个开发过程中,游戏界面设计占据非常重要的地位.因为游戏启动后,第一个映入眼帘的就是整个游戏U ...
- nginx入门篇----功能特性
1.nginx功能特性 可以作为http服务器或者反向代理服务器 能够快速响应静态页面(html)的请求 支持FastCGI.SSL.Virtual Host.URL Rewrite.HTTP.Gzi ...
- gzip压缩及测试方法【转载】
Nginx开启Gzip压缩大幅提高页面加载速度 http://www.veryhuo.com/a/view/51706.html 刚刚给博客加了一个500px相册插件,lightbox引入了很多js文 ...
- Ubuntu14.04用apt在线/离线安装CDH5.1.2[Apache Hadoop 2.3.0]-old
用markdown重写,请稳步这里http://www.cnblogs.com/lion.net/p/5477899.html
- npm 替换为 cnpm
最近执行npm安装组件时特别慢,网上建议可以换为cnpm,cmd命令:npm install -g cnpm --registry=https://registry.npm.taobao.org 可是 ...
- winform上控件太多,绘制时会逐个出现,通常说双缓冲能解决但实际不能解决的问题的解决方法。
protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle ...
- [转]一些TCP和UDP使用问题汇总
下面是在实际后台开发中遇到的一些关于TCP和UDP的问题,这里慢慢积累起来: UDP连续发送2次数据包,第一次发100字节,第二次发200字节,服务端recvfrom(1000)时收到100.200还 ...
- qt的moc,uic,rcc命令的使用
qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了.在windows下写c++程序当然选vs,在mac下写程序当 ...
- POJ2778 DNA sequence
题目大意:给出m个疾病基因片段(m<=10),每个片段不超过10个字符.求长度为n的不包含任何一个疾病基因片段的DNA序列共有多少种?(n<=2000000000) 分析:本题需要对m个疾 ...
- 【java】之对List中每个对象元素按时间顺序排序
import java.text.SimpleDateFormat; import java.util.*; public class ListSort { public static class U ...