ASP.NET MVC5(一)—— URL路由

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Web.Mvc;
  6 using System.Web.Mvc.Routing.Constraints;
  7 using System.Web.Routing;
  8
  9 namespace UrlAndRoutes
 10 {
 11     public class RouteConfig
 12     {
 13         public static void RegisterRoutes(RouteCollection routes)
 14         {
 15             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 16             //路由系统把url拆分成多个片段,如:/Home/Index 为两个片段,可以通过约束路由控制
 17             //路由顺序:一般情况下是以在RouteCollection对象中的出现顺序执行的,如果先匹配到路由,后面的将会不执行
 18             //URL模式的两个关键行为:保守的(Conservative),宽松的(Liberal)
 19             {
 20                 //这两种路由并不能对根目录进行解析
 21
 22                 //添加路由的方式之一,新建一条路由并添加到routes中
 23                 Route route = new Route("{controller}/{action}", new MvcRouteHandler());
 24                 routes.Add("One", route);
 25
 26                 //添加路由的方式之二,映射指定路由
 27                 routes.MapRoute("", "{controller}/{action}");
 28             }
 29             //定义默认值
 30             {
 31                 //只给动作定义默认值,有默认值的可以省略其片段,自动匹配默认值
 32                 routes.MapRoute("", "{controller}/{action}", new { action = "Index" });
 33                 //控制器于动作都定义默认值,这种定义可以识别根目录,自动匹配到默认值中,最多匹配两个片段
 34                 routes.MapRoute("", "{controller}/{action}", new { controller = "Home", action = "Index" });
 35             }
 36             //使用静态URL片段
 37             {
 38                 //使用静态字段,URL中第一个片段必须是固定的public(自定义)才能匹配到
 39                 routes.MapRoute("", "public/{controller}/{action}", new { controller = "Home", action = "Index" });
 40                 //混合片段URL模式,第一个片段必须以X开头,controller取自除X以外的部分
 41                 routes.MapRoute("", "X{controller}/{action}", new { controller = "Home", action = "Index" });
 42                 //静态字段混合片段结合,该url中不包含controller的可变片段,所以会使用默认值,
 43                 //这意味着对Shop控制器上的动作,都会被转换成对Home控制器的请求
 44                 routes.MapRoute("", "Shop/{action}", new { controller = "Home" });
 45             }
 46             //定义自定义片段变量
 47             {
 48                 //controller,action,area等是数据特殊变量名,所以在自定义片段变量中,不可以使用
 49                 //Id为自定义片段变量,在第三个片段的内容会被赋给Id,这条路由可以匹配0-3个片段的URL
 50                 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = "default" });
 51                 //Id定义为可选参数,解析Url片段时,可选参数可以忽略,参数默认值一般在动作方法中设置
 52                 routes.MapRoute("", "{controller}/{action}/{Id}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional });
 53                 //定义可边长路由,这是改变URL模式默认保守性的另一种方式
 54                 //用*号作为前缀,无论URL包含多少片段数,都将全部赋值给catcyall(自定义名称)
 55                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}", new { controller = "Home", action = "Index", Id = UrlParameter.Optional });
 56
 57                 //按照命名空间区分控制器的优先级顺序,在当有两个控制器相同的情况下时,如果不做设置,将会报错
 58                 //设置了命名空间后,遇到匹配的URL,则会优先寻找命名空间下的的控制器,找不到就会回归正常行为
 59                 //命名空间可以设置多个,但都属于同顺序级别,如果出现重复控制器名称,还是会报错
 60                 Route myRoute = routes.MapRoute("MyRoute", "{controller}/{action}/{Id}/{*catcyall}",
 61                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
 62                     new[] { "命名空间名称" });
 63                 //此设置作用于在配置了命名空间优先级后,如果找不到该配置的命名空间,将禁止寻找其他命名空间的控制器
 64                 myRoute.DataTokens["UserNamespaceFallback"] = false;
 65             }
 66             //约束路由
 67             {
 68                 //使用正则表达式约束路由,"^H.*"匹配所有controller变量值以H开头的URL
 69                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
 70                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
 71                     new { controller = "^H.*" });
 72                 //将一条路由 约束到一组指定的值,设置该约束,action只能匹配片段值是Index或者About
 73                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
 74                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
 75                     new { controller = "^H.*", action = "^Index$|^About$" });
 76
 77                 //使用Http方法约束路由,HttpMethodConstraint传参类型是params类型,httpMethod是自定义名称
 78                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
 79                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
 80                     new
 81                     {
 82                         controller = "^H.*",
 83                         action = "^Index$|^About$",
 84                         httpMethod = new HttpMethodConstraint("GET", "POST")
 85                     });
 86                 //使用类型和值约束,RangeRouteConstraint限制Id值为10-20之间,更多类型约束,可以参考命名空间:System.Web.Routing
 87                 //也可以自定义约束,需要实现IRouteConstraint接口
 88                 routes.MapRoute("", "{controller}/{action}/{Id}/{*catcyall}",
 89                     new { controller = "Home", action = "Index", Id = UrlParameter.Optional },
 90                     new
 91                     {
 92                         controller = "^H.*",
 93                         action = "^Index$|^About$",
 94                         httpMethod = new HttpMethodConstraint("GET", "POST"),
 95                         Id = new RangeRouteConstraint(10, 20)
 96                     });
 97             }
 98         }
 99     }
100 }

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

原文地址:https://www.cnblogs.com/liuqiwang/p/9490260.html

时间: 2024-12-12 10:56:10

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

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

本篇主要讲述Routing组件的作用,以及举几个实例来学习Asp.Net MVC2.0 Url路由技术. 接着上一篇开始讲,我们在Global.asax中注册一条路由后,我们的请求是怎么转到相应的View的呢?Controller和Action是怎么解析的?这就是Routing组件干的事情了. Routing的作用:它首先是获取到View传过来的请求,并解析Url请求中Controller和Action以及数据,其次他将识别出来的数据传递给Controller的Action(Controller

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

1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attribute来定义路由.当然,MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 在以前的版本中我们通常在 RouteConfig.cs 文件中通过以下方式来定义路由: routes.MapRoute( name: "ProductPage", url: &quo

ASP.NET MVC 的URL路由介绍

在这个教程中,向你介绍每个ASP.NET MVC一个重要的特点叫做URL路由.URL路由模块是负责映射从浏览器请求到特定的控制器动作. 在教程的第一部分,你将学习标准路由表如何映射到控制器的动作.在教程第二部分,你将学习如何修改默认路由表成为自定义路由. 使用默认路由表 当你创建一个新的ASP.NET MVC 应用程序,应用程序已经配置了默认的URL路由.URL路由在两个地方设置. 第一,URL路由配置在你的应用程序WEB配置文件中(Web.config文件).文件中有四个有关路由的配置 节:s

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

路由: 1.在ASP.NET中路由不专属与ASP.NET MVC,因为路由(Route)是在system.web 命名空间下的,所以传统的WebForm也可以使用路由. 2.什么叫做路由 采用某种机制根据请求URL解析出目标的Controller和Action的名称 3.在WebForm 里Route的作用 因为WebForm里,一个aspx文件就是一个请求的URL,所以物理文件和请求的URL紧密的绑定到了一起.这样有三个局限性: 1>灵活性 2>不利于SEO的优化 3>可读性较差 但是

ASP.NET MVC3 通过URL路由传多个参数方法

在Global.asax文件中,默认路由如下. routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 ); 方法一: Url传参是通过Get的方式,一般我们都是

[Asp.net MVC]Asp.net MVC5系列——第一个项目

目录 概述 创建第一个项目 添加控制器 总结 概述 本教程是个人一步一步学习的总结,希望能帮到正在进入ASP.Net MVC5方向的朋友,个人也是准备进入ASP.NET MVC5领域,虽然艰辛,但是乐此不彼.谁让咱喜欢编程呢?之前接触过ASP.NET MVC4,今天在看发现差别还是有的,不管是使用IDE创建方式,还是使用方式有些地方的确不一样了.手上也没有ASP.NET MVC5的教程,只能看着英文网站,一步一步摸索了.其实我是一直想使用mvc,可事与愿违啊,到目前还是使用的webform. 创

ASP.NET MVC5 新特性:Attribute路由使用详解

1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attribute来定义路由.当然,MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 在以前的版本中我们通常在 RouteConfig.cs 文件中通过以下方式来定义路由: routes.MapRoute( name: "ProductPage", url: &quo

ASP.NET MVC5路由系统机制详细讲解

请求一个ASP.NET mvc的网站和以前的web form是有区别的,ASP.NET MVC框架内部给我们提供了路由机制,当IIS接受到一个请求时,会先看是否请求了一个静态资源(.html,css,js,图片等),这一步是web form和mvc都是一样的,如果不是则说明是请求的是一个动态页面,就会走asp.net的管道,mvc的程序请求都会走路由系统,会映射到一个Controller对应的Action方法,而web form请求动态页面是会查找本地实际存在一个aspx文件.下面通过一个ASP

ASP.NET MVC5 新特性:Attribute路由使用详解 (转载)

1.什么是Attribute路由?怎么样启用Attribute路由? 微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Attribute来定义路由.当然,MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 在以前的版本中我们通常在 RouteConfig.cs 文件中通过以下方式来定义路由: routes.MapRoute( name: "ProductPage", url: &quo