using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Routing.Constraints;
using System.Web.Routing; namespace UrlAndRoutes
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//路由系统把url拆分成多个片段,如:/Home/Index 为两个片段,可以通过约束路由控制
//路由顺序:一般情况下是以在RouteCollection对象中的出现顺序执行的,如果先匹配到路由,后面的将会不执行
//URL模式的两个关键行为:保守的(Conservative),宽松的(Liberal)
{
//这两种路由并不能对根目录进行解析 //添加路由的方式之一,新建一条路由并添加到routes中
Route route = new Route("{controller}/{action}", new MvcRouteHandler());
routes.Add("One", route); //添加路由的方式之二,映射指定路由
routes.MapRoute("", "{controller}/{action}");
}
//定义默认值
{
//只给动作定义默认值,有默认值的可以省略其片段,自动匹配默认值
routes.MapRoute("", "{controller}/{action}", new { action = "Index" });
//控制器于动作都定义默认值,这种定义可以识别根目录,自动匹配到默认值中,最多匹配两个片段
routes.MapRoute("", "{controller}/{action}", new { controller = "Home", action = "Index" });
}
//使用静态URL片段
{
//使用静态字段,URL中第一个片段必须是固定的public(自定义)才能匹配到
routes.MapRoute("", "public/{controller}/{action}", new { controller = "Home", action = "Index" });
//混合片段URL模式,第一个片段必须以X开头,controller取自除X以外的部分
routes.MapRoute("", "X{controller}/{action}", new { controller = "Home", action = "Index" });
//静态字段混合片段结合,该url中不包含controller的可变片段,所以会使用默认值,
//这意味着对Shop控制器上的动作,都会被转换成对Home控制器的请求
routes.MapRoute("", "Shop/{action}", new { controller = "Home" });
}
//定义自定义片段变量
{
//controller,action,area等是数据特殊变量名,所以在自定义片段变量中,不可以使用
//Id为自定义片段变量,在第三个片段的内容会被赋给Id,这条路由可以匹配0-3个片段的URL
routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = "default" });
//Id定义为可选参数,解析Url片段时,可选参数可以忽略,参数默认值一般在动作方法中设置
routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional });
//定义可边长路由,这是改变URL模式默认保守性的另一种方式
//用*号作为前缀,无论URL包含多少片段数,都将全部赋值给catcyall(自定义名称)
routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional }); //按照命名空间区分控制器的优先级顺序,在当有两个控制器相同的情况下时,如果不做设置,将会报错
//设置了命名空间后,遇到匹配的URL,则会优先寻找命名空间下的的控制器,找不到就会回归正常行为
//命名空间可以设置多个,但都属于同顺序级别,如果出现重复控制器名称,还是会报错
Route myRoute = routes.MapRoute("MyRoute", "{controller}/{action}/{Id}/{*catcyall}",
new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
new[] { "命名空间名称" });
//此设置作用于在配置了命名空间优先级后,如果找不到该配置的命名空间,将禁止寻找其他命名空间的控制器
myRoute.DataTokens["UserNamespaceFallback"] = false;
}
//约束路由
{
//使用正则表达式约束路由,"^H.*"匹配所有controller变量值以H开头的URL
routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
new { controller = "^H.*" });
//将一条路由 约束到一组指定的值,设置该约束,action只能匹配片段值是Index或者About
routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
new { controller = "^H.*", action = "^Index$|^About$" }); //使用Http方法约束路由,HttpMethodConstraint传参类型是params类型,httpMethod是自定义名称
routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
new
{
controller = "^H.*",
action = "^Index$|^About$",
httpMethod = new HttpMethodConstraint("GET", "POST")
});
//使用类型和值约束,RangeRouteConstraint限制Id值为10-20之间,更多类型约束,可以参考命名空间:System.Web.Routing
//也可以自定义约束,需要实现IRouteConstraint接口
routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
new
{
controller = "^H.*",
action = "^Index$|^About$",
httpMethod = new HttpMethodConstraint("GET", "POST"),
Id = new RangeRouteConstraint(, )
});
}
}
}
}

学习完精通Asp.Net MVC5的URL路由章节的总结代码

ASP.NET MVC5(一)—— URL路由的更多相关文章

  1. Asp.Net MVC2.0 Url 路由入门---实例篇

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  2. Asp.Net MVC2.0 Url 路由入门---实例篇 【转】

    本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的Vi ...

  3. ASP.NET MVC5 :Attribute路由使用详解

    1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attrib ...

  4. ASP.NET MVC 的URL路由介绍

    在这个教程中,向你介绍每个ASP.NET MVC一个重要的特点叫做URL路由.URL路由模块是负责映射从浏览器请求到特定的控制器动作. 在教程的第一部分,你将学习标准路由表如何映射到控制器的动作.在教 ...

  5. 通过阅读ASP.NET MVC5 框架解密 路由的一点心得

    路由: 1.在ASP.NET中路由不专属与ASP.NET MVC,因为路由(Route)是在system.web 命名空间下的,所以传统的WebForm也可以使用路由. 2.什么叫做路由 采用某种机制 ...

  6. ASP.NET MVC5写.php路由匹配时的问题 ASP.NET MVC 4 在 .NET 4.0 与.NET 4.5 的專案範本差異

    由于外包公司结束合作,所以考虑把其APP服务替换过来,因原后台是用php写的,在不影响员客户端使用的情况下在MVC下重写路由配置实现处理原php链接地址的请求,但实现时发现怎么也匹配不到自己写的路由, ...

  7. 【转】Asp.Net MVC4 之Url路由

    MVC4常见路由的处理方式 //直接方法重载+匿名对象 routes.MapRoute( name: "Default", url: "{controller}/{act ...

  8. Asp.Net MVC4 之Url路由

    先来看下面两个个url,对比一下: http://xxx.yyy.com/Admin/UserManager.aspx http://xxx.yyy.com/Admin/DeleteUser/1001 ...

  9. 在ASP.NET MVC5中使用特性路由

    首先在RegisterRoutes时开启特性路由功能: routes.MapMvcAttributeRoutes(); 然后,就可以使用了. [Route("{productId:int}/ ...

随机推荐

  1. 爬虫服务集群处理nginx返回504

    最近在对爬虫服务做分布式服务的时候总是遇到服务器返回504,搞了两天才发现原来是nginx中有对超时的设置参数,自己都是用默认的,然而客户端的等待时间超过了nginx默认的超时设置 修改 keepal ...

  2. 2015/9/18 Python基础(14):函数式编程

    这篇写了忘发.现在补上. Python不是也不大可能成为一种函数式的编程语言,但是它支持许多有价值的函数式编程语言构建.也有些表现的像函数式编程机制但是从传统上也不能认为是函数式编程语言的构建.Pyt ...

  3. 在不安装Windows服务的情况下,如何进行调试或测试

    最近由于项目需要,写了几个Windows服务,可是如何对其进行测试呢? 如果通过命令Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe ...

  4. 【洛谷 P3187】 [HNOI2007]最小矩形覆盖 (二维凸包,旋转卡壳)

    题目链接 嗯,毒瘤题. 首先有一个结论,就是最小矩形一定有条边和凸包重合.脑补一下就好了. 然后枚举凸包的边,用旋转卡壳维护上顶点.左端点.右端点就好了. 上顶点用叉积,叉积越大三角形面积越大,对应的 ...

  5. ASP.NET 设置DropDownList的当前选项

    1.通过显示字符Text DropDownList.Items.FindByText("你的值").Selected=true; 如果在设置之前,进行过设置,应用如下格式: Dro ...

  6. bzoj 1202 并查集

    首先我们知道若干区间和信息,判断给出信息是否合法,可以用并查集维护,我们用dis[x]表示x到father[x]的距离为多少,即区间father[x]到x的长度,这样我们可以在路径压缩的时候维护dis ...

  7. H题 hdu 2520 我是菜鸟,我怕谁

    题目大意:http://acm.hdu.edu.cn/showproblem.php?pid=2520 我是菜鸟,我怕谁 Time Limit: 2000/1000 MS (Java/Others)  ...

  8. 关于RecylerView:1.在ScrollView的RecylerView滑动事件的处理。2.item之间的距离 小数取整

    1.在ScrollView的RecylerView滑动事件的处理. 在布局文件中在RecylerView外包裹一层相对布局 2.RecylerView item之间的距离 (1)编写SpaceItem ...

  9. Spring Cloud与Spring Boot的关系

    1.Spring Cloud是一个工具集:Spring   Cloud是在Spring    Boot的基础上构建的,用于简化分布式系统构建的工具集:使架构师在创建和发布微服务时极为便捷和有效. Sp ...

  10. 概率DP入门学习QAQ

    emmmm博客很多都烂尾了...但是没空写..先写一下正在学的东西好了 概率DP这东西每次考到都不会..听题解也是一脸懵逼..所以决定学习一下这个东东..毕竟NOIP考过...比什么平衡树实在多了QA ...