zoukankan      html  css  js  c++  java
  • MVC之路由规则 (自定义,约束,debug)

    自定义路由规则的要求,小范围写在前,大范围写在后。
    路由规则可以注册多条,
    路由规则的名称不能重复
    路由规则有顺序,并且按照顺序进行匹配,建议小范围写在前,大范围写在后。
    路由规则可以设置约束 即正则表达式
    路由规则匹配的控制器可以设置命名空间约束

    routes.MapRoute(
    name: "NewShow",
    url: "{year}-{month}-{day}-{id}",
    defaults: new { controller = "News", action = "Show" },
    constraints:new
    {
    year=@"^d{4}$",
    month = @"^d{1,2}$",
    day = @"^d{1,2}$"
    }
    );

    routes.MapRoute(
    // 1.参数name设置路由规则的名称必须是唯一的,重复会报异常默认添加”Default”的路由规则
    name: "Default",
    //2.参数url设置url的路由规则,可变的值使用{}括起来关键字controller、action名称不可变
    url: "{controller}/{action}/{id}",
    //3.参数defaults设置路由规则中参数的默认值类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数参数UrlParameter.Optional表示可选的只读参数如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    路由中的几个对象:
    1.路由规则Route:可以查看源代码了解一下构造方法,需要指定路由格式,默认值,处理器三个值。代码如下:
    routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    2. 路由数据RouteData:当前请求上下文匹配路由规则而得到的一个对象,可以在Action中通过RouteData.GetRequestString("controller/action")获取本些请求中控制或行为的真实名称

    3.路由集合RouteCollection:存放路由规则的集合Collection<RouteBase>,一个MVC项目中,可以配置多个路由规则,按照键值对的格式存储到路由集合中
    4.路由表RouteTable:类中包含静态的RouteCollection属性,完成所有路由规则的全局存储,在Global中完成注册


    客户的请求过程为:
    当一个客户请求过来时,HttpContext请求到RouteCollection中去RouteTable中的第个键值对的Route比对 如果有一个比对路由规则比对成功,则生成一条RouteData数据进而跳转到对应Cotroller的Action中去进行相应的处理。

    routes.MapRoute(
    // 1.参数name设置路由规则的名称必须是唯一的,重复会报异常默认添加”Default”的路由规则
    name: "Default",
    //2.参数url设置url的路由规则,可变的值使用{}括起来关键字controller、action名称不可变
    url: "{controller}/{action}/{id}",
    //3.参数defaults设置路由规则中参数的默认值类型为object,可以传递一个匿名对象,属性取决于规则中定义的参数参数UrlParameter.Optional表示可选的只读参数如果在实际的url中没有指定路由规则中某些参数,则会使用默认值作为参数的值使用
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );路由的调试,在我们开发的 时候可以使用RouteDeugger进行路由的调试,看我们写的路由有没有启作用,用法 如下把RouteDebug.dll添加引用,在Global.asax.cs中注册路由之后 添加 RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);

  • 相关阅读:
    三级菜单python写法(递归写法)
    webstorm2018.1.6版本安装+破解+汉化
    sourceTree 的使用教程
    nodeppt的使用教程
    堆和栈的区别(转过无数次的文章)
    黎曼滤波在神经计算方面的应用
    深度学习笔记——PCA原理与数学推倒详解
    TCP/IP模型详解
    OSI7层模型详解
    CNN车型分类总结
  • 原文地址:https://www.cnblogs.com/haofaner/p/5867471.html
Copyright © 2011-2022 走看看