ASP.NET MVC 学习之路由(URL Routing)
在ASP.NET MVC中,一个URL请求是由对应的一个Controller中的Action来处理的,由URL Routing来告诉MVC如何定位到正确的Controller和Action。
默认路由表
当我们在VS中创建一个新的 ASP.NET MVC程序,程序将会自动使用默认的路由表。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",//默认路由名称
url: "{controller}/{action}/{id}",//URL 和参数
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }//默认参数
);
}
上面的代码是向路由表添加一个名为(Default)的路由。
url 中
{controller} 对应的也就是控制器名称,
{action} 对应的是控制器中的action,
{id} 对应为参数,
defaults 为默认值 controller = "Home" action = "Index" 。
当你在地址栏输入/Home 因为action 有对应的默认值 ,程序也就会执行HomeController.Index()。
当你在地址栏输入/Home/Index/6 时,路由会自动对应参数
controller = Home
action = Index
id = 6
程序也就会去执行 HomeController.Index(6)。
示例展示:
上面的静态方法RegisterRoutes是在Global.asax.cs文件中的Application_Start方法中被调用的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing; namespace MvcApplication
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
同时也包含了其他的一些方法。
自定义路由表
下面增加一个自己定义的路由表
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
name: "Default",//默认路由名称
url: "{controller}/{action}/{id}",//URL 和参数
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },//默认参数
constraints: new { action = @"[a-zA-Z]+" }//只匹配字母
); routes.MapRoute(
name: "MyRoute",//路由名称
url: "News/{newsid}",//URL不带参数
defaults: new { controller = "News", action = "Index" },//默认指定action到Index
constraints: new { newsid = @"\d+" }//newsid必须为数字
);
}
当你在地址栏输入/News/Index?newsid=1 和 /News/1 效果是一样的。
访问/News/1 它会默认 访问 controller=News action=Index 然后参数为1 。
我把默认的路由规则,加了一下限制,让其action 只执行字母,以免覆盖新加的路由规则。
这样我们可以缩短URL 地址,让URL 更加直观友好。
路由约束:
正则表达式约束
通过正则来约束相关路由规则。
routes.MapRoute(
name: "MyRoute",//路由名称
url: "News/{newsid}",//URL不带参数
defaults: new { controller = "News", action = "Index" },//默认指定action到Index
constraints: new { newsid = @"\d+" }//newsid必须为数字
);
上面为约束 newsid为 数字。
routes.MapRoute(
name: "Default",//默认路由名称
url: "{controller}/{action}/{id}",//URL 和参数
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },//默认参数
constraints: new { action = @"[a-zA-Z]+" }//只匹配字母
);
上面为约束 action 只为字母,不允许其他规则。
Http请求方式约束
routes.MapRoute(
name: "MyRoute",//路由名称
url: "News/{newsid}",//URL不带参数
defaults: new { controller = "News", action = "Index" },//默认指定action到Index
constraints: new { newsid = @"\d+", httpMethod = new HttpMethodConstraint("POST") }//newsid必须为数字 并且请求必须为POST
);
上面为约束 http请求 为POST
自定义路由约束
如果标准的路由约束满足不了你的需求,那么可以通过实现 IRouteConstraint 接口来定义自己的路由约束规则。
下面就是实现了一个请求是否来自本地的约束。
public class LocalhostConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
return httpContext.Request.IsLocal;
}
}
在路由表中的应用:
routes.MapRoute(
name: "Default",//默认路由名称
url: "{controller}/{action}/{id}",//URL 和参数
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },//默认参数
constraints: new { action = @"[a-zA-Z]+", isLocal = new LocalhostConstraint() }//只匹配字母 并且请求只允许本地
);
上面为约束 http请求 来自本地。
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。
ASP.NET MVC 学习之路由(URL Routing)的更多相关文章
- ASP.NET MVC学习之路由篇(3)
根据路由输出链接 既然是网站开发自然少不了链接,我们已经学会了强大的路由,但是还缺少一步就是能够将这些路由的路径输出到页面,下面我们就开始学习如何输出路由路径. 首先我们的路由注册部分如下所示: 1 ...
- ASP.NET MVC学习之路由篇(2)
7.解决与物理路径的冲突 当发送一个请求至ASP.NET MVC时,其实会检查网站中存不存在这个请求的物理路径文件,如果存在的话,就会直接将这个物理文件返回.但是有时候我们需要它执行控制器的某个方法, ...
- ASP.NET MVC学习之路由篇(1)
1.基本路由 RouteConfig.cs: 1 public class RouteConfig 2 { 3 public static void RegisterRoutes(RouteColle ...
- ASP.NET MVC学习之路由篇
约束路由 上面我们有一个{id}用来捕获参数的,但是你也发现了它可以捕捉任何字符串等等,但是我们有时需要限制它,比如让它只能输入数字,那么我们就可以使用正则表达式去约束它. 如下修改RouteConf ...
- ASP.NET MVC学习之控制器篇
一.前言 许久之后终于可以继续我的ASP.NET MVC连载了,之前我们全面的讲述了路由相关的知识,下面我们将开始控制器和动作的讲解. ASP.NET MVC学习之路由篇幅(1) ASP.NET MV ...
- ASP.NET MVC学习之Ajax(完结)
一.前言 通过上面的一番学习,大家一定收获不少.但是总归会有一个结束的时候,但是这个结束也意味着新的开始. 如果你是从事ASP.NET开发,并且也使用了第三方控件,那么一定会觉得ASP.NET开发aj ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC的运行机制--url的全局分析
全局 首先我们来看一副图片 首先,用户通过Web浏览器向服务器发送一条url请求,这里请求的url不再是xxx.aspx格式,而是http://HostName/ControllerNam ...
- 【翻译】ASP.NET MVC 5属性路由(转)
转载链接:http://www.cnblogs.com/thestartdream/p/4246533.html 原文链接:http://blogs.msdn.com/b/webdev/archive ...
随机推荐
- 基于Winform、WPF等的客户端文件下载
有时候,我们用C#写一些客户端应用程序需要从服务器下载一些资源,如图片.dll.配置文件等.下面就来说一下,在Winform及WPF中如何下载文件. 我们的资源大多放在自己的网站上,或者从其他网站下载 ...
- 关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)
讲完了SSI,ESI,下面就要讲讲CSI了 ,CSI是浏览器端的动静整合方案,当我文章发表后有朋友就问我,CSI技术是不是就是通过ajax来加载数据啊,我当时的回答只是说你的理解有点片面,那么到底什么 ...
- CocoaPods 使用
为什么要使用这个玩意呢,最近在使用swift开发项目,使用 swift 开源库的时候,在git上下载后居然不知道哪些是必须文件,还要思考下,看看哪些是需要的(不像原来oc开源库,一目了然),网上使用d ...
- 手把手教你做一个原生js拖动滑块【兼容PC和移动端】
废话少说: 在PC端可以用mousedown来触发一个滑块滑动的效果,但在手机上,貌似无法识别这个事件,但手机上有touchstart事件,可以通过一系列"touch"事件来替代P ...
- 说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现
返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以 ...
- MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
返回目录 在看这篇文章之前,你有必要先看我之前的文章,之前文章是将一个方法以参数的形式传给KO,然后返回一个真假值,去做验证,这类似于面向对象语言里的委托,在JS里我们叫它回调方法,本篇文章与前一文章 ...
- Atitit 图像处理知识点 知识体系 知识图谱v2
Atitit 图像处理知识点 知识体系 知识图谱v2 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像 ...
- OutputCache属性详解(一)一Duration、VaryByParam
目录 OutputCache概念学习 OutputCache属性详解(一) OutputCache属性详解(二) OutputCache属性详解(三) OutputCache属性详解(四)— SqlD ...
- C#并行编程-Task
菜鸟学习并行编程,参考<C#并行编程高级教程.PDF>,如有错误,欢迎指正. 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 ...
- salesforce 零基础学习(二十六)自定义图表chart简单介绍(使用apex和VF实现)
chart在报表中经常使用到,他可以使报表结果更加直观的展现给用户.salesforce支持VF和apex代码来更好的展示chart. chart分类:常用的图表样式有饼状图,柱状图,折线图,条形图, ...