MVC中的网址路由

什么是网址路由?

理论上的东西,小编也就不在多说了,只简单的介绍下,自己的认识。

所谓的网址路由,就是一个规则。通过这个规则来匹配。就好比我们经常用到的正则表达式一样。

默认的网址路由

打开项目中的RouteConfig.cs的话,会看到如下代码

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  

            routes.MapRoute(
                name: "Default",              //路由名称
                url: "{controller}/{action}/{id}",    //参数匹配表
                //默认参数
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }</span></span>

所有的ASP.NET MVC Routing都会在此定义。其中Routable.Routes是一个公开的静态对象,用于存储所有的Routing的规则集

路由分析

看完了上面默认的路由信息,下面来解读一下。

1.每一个routes都代表了一个匹配的规则。

2.IgnoreRoutes:定义了不需要匹配Routing处理的网址。

3.resource:随便的一个名称,用来匹配网址中类似**.axd

4.{*pathInfo}:*是我们经常见到的,代表全部,取到全部的意思。例如网址是/Test.axd/b/d/e,则{pathInfo}就带表b/d/e.但是如果不带*的话,就会只取到b变量的位置。

5.MapRoute就是所谓的定义默认路由规则

试一试

看了上面的解释,来几个例子体验一下。

例子一:网址是http://localhost/Test.axd/b/c/d/ehttp://localhost/Test.axd

1.先比对Routes.IgnoreRoute。通过比对发现两者刚好合适,只不过后者中的{*patchInfo}为空而已。所以Http请求会由此网址服务。

例子二:网址是Http://localhost/Home/Login?id=3

1.从上至下开始比对,由于Routes.IgnoreRoute规则不通过,所以开始比对Routes.MapRoute的规则。

2.通过比对{controller}/{action}/{id},我们可以得到controller=Home,action=Login,而?id=3就不在是此规则中的了。

3.因为规则中都是以斜杠(/)来划分的,因此id=123比对不到但是可以读取到向的默认值UrlParamete.Optional。

 路由扩展
 如上述分析,我们知道了路由的规则后,因此也可以定制属于自己的规则。
 正则表达式
  
<span style="font-family:SimSun;font-size:18px;"> //路由约束
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  

            routes.MapRoute(
                name: "Default",              //路由名称
                url: "{controller}/{action}/{id}",    //参数匹配表
                //默认参数
                defaults: new { controller = "Home", action = "Index", id =""},
                //添加限制条件,只允许Controller是以H开头
                constraints: new { controller="^H.*"}

            );
        }</span>
 以上在路由中通过Contraints添加为路由添加了限制条件,只允许通过以H开头的。

 网址路由还有其他的一些用途,有兴趣的,多多研究与分享。





时间: 2024-10-26 01:19:40

MVC中的网址路由的相关文章

ASP.NET Core MVC 中两种路由的简单配置

1.全局约定路由 这种方式配置优先级比较低,如果控制器或者方法上标记了特性路由那么优先走特性路由. 当建立好一个mvc项目里,路由都是默认配置好的. 如果建立的是空项目那么需要手动配置: 1.需要在ConfigureServices方法中添加mvc服务 services.AddMvc(); 2.在Configure添加mvc中间件: app.UseMvcWithDefaultRoute(); //添加mvc中间件并使用默认路由配置 这里添加mvc中间时使用的是默认的路由配置,默认的路由配置就是跟

MVC中如何设置路由指定默认页

MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单 如下: Login是控制器,Index 是动作 在全局Global.asax中改动下即可 这个是针对area的默认页 namespaces:默认页的命名空间 DataTokens:该area的键值对 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults:

MVC中的URL路由(一)

URL路由系统通过对请求地址进行解析从而得到以目标Controller名称为核心的路由数据.Url路由系统最初是为了实现请求url与物理文件路径分离而建立的,MVC的Url Route是将Url地址与物理文件映射转移到了目标Controller的映射. Url路由不是ASP.NET MVC特有的,而是建立在ASP.NET上面的,MVC的只是对这个路由的拓展使用(asp.net也开始使用这拓展了). 我们在App_Start文件夹中找到RouteConfig.cs的文件,打开看 1 public

MVC笔记 网址路由与MVC的生命周期

一.网址路由 1.1  比对通过浏览器传来的HTTP请求 客户端对ASP.NET网站发出请求时,能通过R偶汤尼盖找到适当的HttpHandler来处理网页,大致的流程如图: 如果HttpHandler是由MvcHandler来处理,那么,此时就会进入MVC的执行生命周期,并且会找到适当的Controller与Action来对其进行处理,并将信息反馈给客户端. 1.2 将适当的网址返回浏览器 网址路由的另一个用途是决定MVC 应该输出什么样的网址并将其返回浏览器,跳转地址或在View中显示超链接时

ASP.NET MVC 小牛之旅3:Routing——网址路由

网址路由(Routing)在ASP.NET MVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器. 3.1匹配通过浏览器传来的HTTP请求 首先我们来看下第一个用途,也就是匹配通过浏览器传来的HTTP请求. 客户端对ASP.NET网站发出请求时,能够通过Routing找到合适的HttpHandler来处理网页,大致的处理流程为: 如果HttpHandler是由MvcHandler来处理的,那么,此时就会进入ASP.NET MVC的执行生命周期,

MVC - Routing - 网址路由

1. Routing  : 路由 主要是比对通过浏览器传来的http要求与响应适当的网址给浏览器. ? 1 @Html.ActionLink("关于","About","Home") 这段代码生成的HTML超连接: ? 1 <a href="/Home/About">关于</a> 2. 默认情况下 网址路由规则定义在 App_Start\RouteConfig.cs文档中. ? 1 2 3 4 5 6

浅谈MVC中路由

引言 学习ASP.NET MVC 路由这一关是肯定必不可少的.这一节,我们就来简单介绍下MVC中的路由机制.简单的路由机制相信大家都已了解,这一节主要介绍路由中很少使用的部分. 使用静态URL片段 在一个路由中,并不是所有的URL片段都要求是动态的,也可以创建具有静态片段的模式.例如以下的路由: 1 routes.MapRoute("StaticRoute", "X{controller}/{action}", 2 new { controller = "

angular.js的路由和模板在asp.net mvc 中的使用

我们知道angular.js是基于mvc 的一款优秀js框架,它也有一套自己的路由机制,和asp.net mvc 路由不太一样.asp.net mvc 的路由是通过不同的URL到不同的controller然后交给controller去呈现视图.但是在angular.js则是需要提前指定一个module(ng-app),然后去定义路由规则,通过不同的URL,来告诉ng-app 去加载哪个页面.再渲染到ng-view.通过angular.js路由的使用,可以很容易实现页面的局部刷新.更加高效的去创建

YbSoftwareFactory 代码生成插件【二十四】:MVC中实现动态自定义路由

上一篇介绍了 公文流转系统 的实现,本篇介绍下MVC下动态自定义路由的实现. 在典型的CMS系统中,通常需要为某个栏目指定个友链地址,通过指定友链地址,该栏目的地址更人性化.方便记忆,也有利用于搜索引擎优化. 但在MVC中,通常需要在应用程序启动时注册路由规则,该路由规则又通常和控制器进行了关联,也就是某个地址通常情况下都是有对应的控制器进行处理的.但在MVC中如何做到自定义动态路由,以便能在运行时通过某个控制器处理一些运行时动态设定的Url地址呢? 方法当然是有的:    1.首先实现一个动态