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 ...
随机推荐
- UVA1003(dfs+进制转换)
题意:输入很多字符的16进制数,现在需要你先转化为2进制,之后二进制中1和0组成的字符需要你求出来. 思路:字符每一个都有所不同可以靠圆圈的数目求出. #include<cstdio> # ...
- FreeBSD Opera Flash问题
环境:FreeBSD 10,Opera,kldload linux 有些地方还是需要 flash 阿,但按照 Handbook 里面安装了 linux-f10-flashplugin11 和 oper ...
- maven3.2.3+eclipse4.4+JDK1.8+win8.1_64bit环境搭建
--------------------------------------- 博文作者:迦壹 博客标题:win8.1_64bit+eclipse4.4+maven3.2.3+JDK1.8环境搭建 博 ...
- 使用异步I/O大大提高应用程序的性能
转自:https://www.ibm.com/developerworks/cn/linux/l-async/ AIO简介 Linux中最常见的输入输出(I/O)模型是同步I/O.在这个模型中,当请求 ...
- WebAPI IIS PUT和DELETE请求失败
IIS拒绝PUT和DELETE请求是由于IIS为网站默认注册的一个名为WebDAVModule的自定义HttpModule导致的,如果我们的站点不需要提供针对WebDAV的支持,解决这个问题最为直接的 ...
- ZIP4J---ZIP文件压缩与解压缩学习
package com.wbh.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.IO ...
- Kettle使用介绍
本文主要阅读目录如下: 1.Kettle概念 2.下载和部署 3.Kettle环境配置 4.Kettle使用及组件介绍 ETL(Extract-Transform-Load的缩写,即数据抽取.转换.装 ...
- 事件驱动之Twsited异步网络框架
在这之前先了解下什么是事件驱动编程 传统的编程是如下线性模式的: 开始--->代码块A--->代码块B--->代码块C--->代码块D--->......--->结 ...
- html: title换行方法 如a链接标签内title属性鼠标悬停提示内容换行
换行代码符合分别为: “&#;”和“&#;” <a href="0.shtml" title="第一排 第二排 第三排">title ...
- Lab_2_SysOps_VPC_Linux_v2.5
System Operations - Lab 2: Configuring a Virtual Private Cloud with Amazon VPC - Linux - 2.5 ======= ...