mvc学习之路由

3 篇文章 0 订阅

总结如下:

越是具体的路由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 }
            //);
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值