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. CMDB资产管理系统开发【day27】:cmdb API安全认证

    1.API验证分析 API三关验证 客户端和服务端中都存放一份相同的随机字符串,客户端发请求的时候把随机字符串和当前时间进行MD5加密,同时带着当前时间通过请求头发送到API,进入三关验证. 第一关是 ...

  2. Spring知识点复习

    Spring知识点复习 一.专业术语 侵入式设计 引入框架,对现有的类的结构有影响,即需要实现或继承某些特定类.如:Struts框架 非侵入式设计 引入框架,对现有的类结构没有影响.如:Hiberna ...

  3. 【BZOJ】1299: [LLH邀请赛]巧克力棒

    [算法]博弈论 [题解]这道题不是典型的SG函数题了. 不把它当成游戏看待,那么这道题是在说n个石子堆,每次可以加入若干个或进行Nim游戏. 我们当前先手,则考虑构造必败态来获胜. 当前已加入的NIm ...

  4. 【BZOJ】1202: [HNOI2005]狡猾的商人

    [题意]w组数据,给定n和m,给出m段区间[s,t](1<=s<=t<=n)的数字和,求是否矛盾.n<100,m<1000,w<100. [算法]带权并查集 [题解 ...

  5. 基本控件文档-UISwitch属性---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  6. hdu 2545 树上战争(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2545 树上战争 Time Limit: 10000/4000 MS (Java/Others)     ...

  7. 有向有权图的最短路径算法--Dijkstra算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  8. Vue组件-组件的注册

    注册组件 全局组件 注册组件就是利用Vue.component()方法,先传入一个自定义组件的名字,然后传入这个组件的配置. Vue.component('my-component', { templ ...

  9. AJAX 核心 —— XMLHTTPRequest 对象回顾

    一.AJAX概述 不使用 AJAX 的网页,如果要更新内容,需要重载整个页面. AJAX ( Asynchronous Javascript And XML ,异步 Javascript 和 XML) ...

  10. macaca安装失败的解决办法!

    https://github.com/macacajs/macaca-android https://www.jianshu.com/p/76a5be6c1036