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 ...
随机推荐
- Java提高篇(二七)-----TreeMap
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
- channel vs mutex
记录许总演讲PPT指出的实践: channel– 本质上是一个 MessageQueue– 非常正统的执行体间通讯设施• sync.Mutex/RWMutex/Cond/etc– 不要把 channe ...
- Sqlserver 如何获取每组中的第一条记录
在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组中的一条数据. 例子 我们要从上面获得的有效 ...
- 早安Visual Studio!一次重构之旅,夏洛特烦恼
vs问题描述 我的IDE版本是vs2013,今天新开发了一个功能,是一个接口程序,当F5调试时,出现了莫名的错误,为什么呢?因为vs弹出了下面的一个框,只说是“未将对象引用设置到对象实例“. 点击”确 ...
- Redis教程(十五):C语言连接操作代码实例
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/143.html 在之前的博客中已经非常详细的介绍了Redis的各种操作命令 ...
- HTML学习入门
HTML(元素.属性) HTML: 超文本标记语言 1. 超文本即为带有链接属性的文本 2.标记即为标签 一.body属性: bgcolor:页面背景颜色 text:文字颜色 backgroun ...
- 让自己成为合格的IT员
2016年10月27日,正式加入了IT天启网络公司,从今天开始就意味着我要正式进军IT行业了. 虽然是为期四个半月的培训,我相信我能够我一定可以在这四个半月的时间里成为一个合格的.优 ...
- HTML5 的 localStorage(本地数据库) 的用法
判断浏览器是否支持localStorage可以使用下面的代码:if(window.localStorage){ alert("支持localStorage") }else{ ...
- 阿里云上安装mysql步骤/ 阿里云ECS搭建Java+mysql+tomcat环境
使用阿里云ECS挺长一段时间了.这两天碰巧朋友小白让我一步一步教他在ECS上搭建Java+mysql+tomcat环境,所以把在这里把步骤在这简单整理了一下,以便需要的人查阅. 我购买的阿里云服务器系 ...
- 建站集成软件包 XAMPP搭建后台系统与微信小程序开发
下载安装XAMPP软件,运行Apache和MySQL 查看项目文件放在哪个位置可以正常运行 然后访问localhost即可 下载weiphp官网的weiapp(专为微信小程序开发使用)放在htdocs ...