mvc路由
1、URL模式路由系统用一组路由来实现它的功能。这些路由共同组成了应用程序的URL架构或方案。URL的两个关键行为:a.URL模式是保守的,因而只匹配与模式具有相同片段数的URL。b.URL模式是宽松的,如果一个URL正好居右正确的片段数,该模式就会用来为片段变量提取值,而不管这个值可能是什么。2、使用静态URL片段//Controller会加上Xroutes.MapRoute("", "X{controller}/{action}",new { controller = "Product", action = "Index" });//会导航到Store这个控制器中,而不会导航到Product控制器routes.MapRoute("Store", "Store/{action}",new { controller = "Product" });routes.MapRoute("", "{controller}/{action}",new { controller = "Product", action = "Index" });//路由的格式必须是Public/开头routes.MapRoute("", "Public/{controller}/{action}",new { controller = "Product", action = "Index" });3、定义自定义片段变量/*如果在URL中没有{id}这个片段,默认下会把DefaultId赋值给id*/routes.MapRoute("", "{controller}/{action}/{id}",new { controller = "Product", action = "Index" ,id="DefaultId"});4、定义可选URL片段//id默认值是UrlParameter.Optional,表明片段变量是可选的routes.MapRoute("", "{controller}/{action}/{id}",new { controller = "Product", action = "Index" ,id=UrlParameter.Optional);5、定义可变长路由/*改变URL模式默认保守性的另一种方式是接收可变数目的URL片段。通过一个全匹配(catchall)的片段变量,并以星号(*)作为其前缀,便可以定义对可变片段数的支持。*/routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional });6、按命名空间区分控制器优先顺序routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional },/*这句话的作用:让mvc框架首先去AdditionalControllers这个命名空间下找控制器,*如果没找到合适的控制器,mvc框架默认会回到正常行为。*/new[] { "URLsAndRoutes.AdditionalControllers" });禁用备用命名空间Route myRoute = routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional }new[] { "URLsAndRoutes.AdditionalControllers" });/*这句话是指如果AdditionalControllers命名空间下没有相匹配的控制,请求会失败。*/myRoute.DataTokens["UseNamespaceFallback"] = false;
1、用正则表达式约束路由、将一条路有约束到一组指定的值
Route myRoute = routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional },/*controller = "^H.*" 用正则表达式来约定路由,它只匹配以H开头的控制器;*action只匹配Index或About的URL。*/new { controller = "^H.*", action = "^Index$|^About$" });
2、使用HTTP方法约束路由
routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional },/**httpMethod只允许GET请求。*/new{ httpMethod = new HttpMethodConstraint("GET") },new[] { "URLsAndRoutes.AdditionalControllers" });
3、使用类型和值约束
routes.MapRoute("", "{controller}/{action}/{id}/{*catchall}",new { controller = "", action = "", id = UrlParameter.Optional },/**id是10到20之间的一个数字。*/new{ id= new RangeRouteConstraint(10,20) },new[] { "URLsAndRoutes.AdditionalControllers" });
4、定义自定义约束
public class UserAgentConstraint : IRouteConstraint{private string requiredUserAgent;public UserAgentConstraint(string agentParm){requiredUserAgent = agentParm;}/// <summary>/// 确定 URL 参数是否包含此约束的有效值。/// </summary>/// <param name="httpContext">一个对象,封装有关 HTTP 请求的信息</param>/// <param name="route">此约束所属的对象</param>/// <param name="parameterName">正在检查的参数的名称</param>/// <param name="values">一个包含 URL 的参数的对象</param>/// <param name="routeDirection">一个对象,指示在处理传入请求或生成 URL 时,是否正在执行约束检查</param>/// <returns>如果 URL 参数包含有效值,则为 true;否则为 false</returns>public bool Match(HttpContextBase httpContext, Route route, string parameterName,RouteValueDictionary values, RouteDirection routeDirection){bool flag = false;//判断处理客户端UserAgent属性flag = httpContext.Request.UserAgent != null&& httpContext.Request.UserAgent.Contains(requiredUserAgent);return flag;}}//只匹配来自用户代理字符串含有Chrome的浏览器请求。
routes.MapRoute("", "{*cathcall}",
new { controller = "Product", action = "Index" },
new { customConstraint = new UserAgentConstraint("Chrome") },new[] { "URLsAndRoutes.AdditionalControllers" });
1、启用和运用属性路由
在RegisterRoutes方法中加入这一句:routes.MapMvcAttributeRoutes();这样就可以使用属性路由。例如://[RoutePrefix("Homes")]//前缀,在Url中会加入 Homes 例:http://localhost:11236/Homes/Home/List/11-124public class HomeController : Controller{//// GET: /Home/public ActionResult Index(int id = 8){ViewBag.ControllerName = "Home";ViewBag.ActionName = "Index";return View();}//[Route("Home/List/{id:int}-//{name}")]//http://localhost:11236/Homes/Home/List/11-124
[Route("~/Test")]public ActionResult List(int id = 8){ViewBag.ControllerName = "Home";ViewBag.ActionName = "List";//ViewBag.Id = RouteData.Values["id"];//只能获取到路由中定义的{id}ViewBag.Id = id;return View();}}
("NoParameter","{controller}/{action}/{id}");三.带命名空间的路由routes.MapRoute(
"AdminControllers", // 路由名称
"{controller}/{id}-{action}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值
new string[] { "Admin.Controllers" }//命名空间
);四.带约束的路由规则(约束的意思就是用正则这类约束必须符合条件才可以)routes.MapRoute(
"RuleControllers",
"{controller}/{action}-{Year}-{Month}-{Day}}",
new { controller = "Home", action = "Index", Year = "2010", Month = "04", Day = "21" },
new { Year = @"^\d{4}", Month = @"\d{2}" } //4位数 2位数
);五.带名称空间,带约束,带默认值的路由规则routes.MapRoute(
"Rule1",
"Admin/{controller}/{action}-{Year}-{Month}-{Day}",
new { controller = "Home", action = "Index", Year = "2010", Month = "04", Day = "21" },
new { Year = @"^\d{4}", Month = @"\d{2}" },
new string[] { "Admin.Controllers" }
);六.捕获所有的路由routes.MapRoute(
"All", // 路由名称
"{*Vauler}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
mvc路由的更多相关文章
- ASP.NET MVC 路由(一)
ASP.NET MVC路由(一) 前言 从这一章开始,我们即将进入MVC的世界,在学习MVC的过程中在网上搜索了一下,资料还是蛮多的,只不过对于我这样的初学者来看还是有点难度,自己就想看到有一篇引导性 ...
- ASP.NET MVC 路由(二)
ASP.NET MVC路由(二) 前言 在上一篇中,提及了Route.RouteCollection对象的一些信息,以及它们的结构所对应的关系.按照处理流程走下来还有遗留的疑问没有解决这个篇幅就来讲 ...
- ASP.NET MVC 路由(三)
ASP.NET MVC路由(三) 前言 通过前两篇的学习会对路由系统会有一个初步的了解,并且对路由系统中的Url规则有个简单的了解,在大家的脑海中也有个印象了,那么路由系统在ASP.NETMVC中所处 ...
- ASP.NET MVC 路由(四)
ASP.NET MVC路由(四) 前言 在前面的篇幅中我们讲解路由系统在MVC中的运行过程以及粗略的原理,想必看过前面篇幅的朋友应该对路由有个概念性的了解了,本篇来讲解区域,在读完本篇后不会肯定的让你 ...
- ASP.NET MVC 路由(五)
ASP.NET MVC 路由(五) 前言 前面的篇幅讲解了MVC中的路由系统,只是大概的一个实现流程,让大家更清晰路由系统在MVC中所做的以及所在的位置,通过模糊的概念描述.思维导图没法让您看到路由的 ...
- MVC路由探寻,涉及路由的惯例、自定义片段变量、约束、生成链接和URL等
引子 在了解MVC路由之前,必须了解的概念是"片段".片段是指除主机名和查询字符串以外的.以"/"分隔的各个部分.比如,在http://site.com/Hom ...
- Asp.Net MVC 路由 - Asp.Net 编程 - 张子阳
http://cache.baiducontent.com/c?m=9d78d513d98316fa03acd2294d01d6165909c7256b96c4523f8a9c12d522195646 ...
- ASP.NET MVC 路由进阶(之二)--自定义路由约束
3.自定义路由约束 什么叫自定义路由约束呢?假如路由格式为archive/{year}/{month}/{day},其中year,month,day是有约束条件的,必须是数字,而且有一定范围. 这时候 ...
- 自定义MVC路由配置
首先我用MVC4新增一个订单查看的功能 1.创建控制器OrderController namespace MvcApplication3.Controllers { public class Orde ...
- AngularJS html5Mode与ASP.NET MVC路由
AngularJS html5Mode与ASP.NET MVC路由共存 前言 很久之前便听说AngularJS,非常酷,最近也比较火,我也在持续关注这个技术,只是没有认真投入学习.前不久公司找我们部门 ...
随机推荐
- bzoj3991 [Sdoi2015]寻宝游戏 set动态维护虚树+树链求并
题目大意:支持多次操作,增加或删除一个关键点 动态维护虚树边权和*2 分析:可以用树链求并的方法,最后减去虚树的根到1距离 注意到树链求并是所有点到根距离-所有dfn序相邻两点的LCA到根距离 找df ...
- 前端MVVM框架:Knockout.JS(一)
前言 在我们平时开发 Web 应用程序的时候,如果项目不算特别大的话,一般都是拿 jQuery 再配合一些前端 UI 框架就在项目上面应用了.如果页面逻辑稍微复杂的话,那个在写前端 JavaScrip ...
- iostat中 %util高 应用延迟高
经过长时间监控,发现iostat 中的%util居高不下,一直在98%上下,说明带宽占用率极高,遇到了瓶颈. 且读写速度很慢,经过排查,发现是HBA卡出现问题,更换后,用dd if命令测试,磁盘的读写 ...
- Java反射机制示例
链接: http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package com.stono.reftest; imp ...
- Bootstrap入门(二十一)组件15:警告框
Bootstrap入门(二十一)组件15:警告框 通过这些简单.灵活的进度条,为当前工作流程或动作提供实时反馈. 进度条组件使用了 CSS3 的 transition 和 animation 属性来完 ...
- HDU1864(背包)
最大报销额 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- android: activity之间切换的抽屉效果
之前一直用的是向左平移和向右平移的切换动画,看到别的APP那个抽屉效果,自己也弄了一个!感谢给我提供帮助的大神们! 将退出动画的参数设置为0时,进入动画则设置为向左平移,就实现了抽屉效果! 进入的动画 ...
- System.Web.Caching.Cache 方法汇总
在做后台的时候,想着把所有栏目放到缓存里,就这里了一个类.必然是有缺陷,暂时没有实现滑动缓存 using System; using System.Collections; using System. ...
- 实际开发中,实用的辅助iOS开发的工具
就目前所知,开发iOS绝大部分都是用Xcode,除此工具之外,还有几个好用的可以辅助实际开发中遇到的问题,拥有这种辅助开发技能,在工作中,甚至是以后的面试中,都可能会有不小的帮助. 下面推荐三个实用的 ...
- asp.net 验证码技术
网站验证码是一种很常用的技术.下面我介绍下技术上是如何实现的. 验证码是一张图片.我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx). < ...