总结如下:
越是具体的路由url,权限越大,越写在上面,匹配到不往后面匹配
必须有controller action路由值
可给路由参数写正则,具体代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace RouteViewbagDemo
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
/*
简单理解就是忽视对axd.文件的解析,即高速服务器,统一按照MVC路由规则解析,什么鬼?为什么要忽视
很容易想到,因为服务器本身是支持这种文件的解析,其实可以自定义处理程序,统一处理.aspx文件路径
(此模式将匹配以.aspx 结尾的任何 URL,其中包括具有查询字符串参数的 URL。全部排除
详细见这篇文章,https://docs.microsoft.com/zh-cn/dotnet/api/system.web.routing.routecollection.ignore?view=netframework-4.8
*/
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
/*
所谓学习路由,主要是学习RouteCollection这个路由集合对象的方法,先看默认的接收三个参数的方法
第一个参数:name因为路由集合对象是借助一个集合,存放路由,这个name就是每个路由的key,所以不能重复,
第二个参数:url重点讲述,比如下面几种写法,得到结论如下:
MVC框架内部要求,url必须有controller,action作为路由变量,尤其是默认值controller="",且两个变量之间有分隔符
否则报错
*/
//https://localhost:44390/ 很明显没有内容,匹配默认值controller=Home,url匹配都是这个路径/后面开始匹配,解析出路由信息
//https://localhost:44390/test 因为能匹配到controller=test,既然给了值匹配到就不会找默认值,
//https://localhost:44390/home 匹配到就不会采用默认,可以正确路由,
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{*name}",
// defaults: new { controller = "Home", action = "Index" }
//);
//https://localhost:44390/ 直接禁止访问根目录,根据这个路由,虽然给了默认值,但是不认
//https://localhost:44390/home/index/id,n 最低要求写上1,2 {controller}/{action}/{id},{name}/{addr}
//https://localhost:44390/home/index/id,n,d 最低要求1,2,3 {controller}/{action}/{id},{name},{addr}
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id},{name},{addr}",
// defaults: new { controller = "Home", action = "Index", id = "1", name = "2", addr = "武汉" }
//);
//第四个参数:是一个正则表达式,匿名对象
//后面跟一个正则表达式,@是转义之用,限制请求参数不对,无法访问
//斜杠后面,必须跟上一个0-99中间的数字,才可以正常访问
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{name}",
defaults: new { controller = "Home", action = "Index", name = 28 }, new { name = @"\d|\d{2}" }
);
/*
//没有后面的name,就不行
//总而言之,当控制器出现冲突,加上namespaces区分,即不同的命名空间可能存在相同的控制器名称
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new string[] { "MVCRouterDemo.Controllers" }
);
路由器从上往下,优先级依次降低,最上路由优先级最高,
一般限制越小,越具体放上面,范围宽广放在下面,尽量让匹配上就结束路由匹配,
就像捕捉异常
try
{
}
catch (NotImplementedExceptionException e)
{
}
catch (Exception e)
{
}
*/
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
//);
}
}
}