• MVC路由


    public class RouteConfig
    {
    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 }
    );
    }
    }
    

      

    这是我们页面初始化创建的路由

    当一个MVC应用程序首次运行时,会调用Application_Start()方法。这个方法随后调用了RegisterRoutes()方法。RegisterRoutes()方法创建了路由表。

    默认的路由表包含了一个路由(名叫Default)。Default路由将URL的第一部分映射到控制器名,URL的第二部分映射到控制器动作,第三个部分映射到一个叫做id的参数。

    假设你在浏览器的地址栏输入了下面的URL:

    /Home/Index/3
    

      

    默认的路由将这个URL映射为下面的参数:

    Controller = Home
    
    Action = Index
    
    id = 3
    

      

    当你请求URL /Home/Index/3时,将会执行下面的代码:

    HomeController.Index(3)
    

      

    Default路由包含了所有三个参数的默认值。如果你不提供控制器,那么控制器参数默认值为Home。如果你不提供动作,动作参数默认为值Index。最后,如果你不提供id,id参数默认为空字符串。

    加入我们输入的地址

    /Home

    由于Default路由参数的默认值,输入这个URL将会调用代码清单2中的HomeController类的Index()方法。因为没有adction的时候会默认到Index()

    创建自定义路由

    假如我们现在要做一个博客 地址如下/Archive/12-25-2009  这样的地址想要显示的是12月25日期下所有的内容列表

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
    
                routes.MapRoute(
                    "Blog",                                           // Route name
                    "Archive/{entryDate}",                            // URL with parameters
                    new { controller = "Archive", action = "Entry" }  // Parameter defaults
                );
    
    
                routes.MapRoute(
                    "Default",                                              // Route name
                    "{controller}/{action}/{id}",                           // URL with parameters
                    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
                );
    
            }
    

      

    必须要将Bolg的路由放在Default前面 因为Default也满足Bolg的路由 所以 在特殊路由的情况下应该放在Default前面 不然会被拦截

    在Bolg在 Archive没有被{}包起来,说明是个常量,这里意思就是在所有的Archive的controller里面去匹配 如果输入的controller能匹配的到就去匹配,匹配不到就会到默认

    Entry的controller中

    约束

    routes.MapRoute(
        "Product",
        "Product/{productId}",
        new {controller="Product", action="Details"}
    );
    

      

    下面这段路由 实际上我们想带入一个方法 这个方法只能接受数字类型

    但是 下面的都会执行

    /Product/23
    /Product/7
    

      

    不幸的是,路由也会匹配下面的URL:

    /Product/blah
    /Product/apple
    

      

    这时候就会报错,所以我们必须要对参数经行约束

    routes.MapRoute(
        "Product",
        "Product/{productId}",
        new {controller="Product", action="Details"},
        new {productId = @"d+" }
     );
    

      

    正则表达式d+匹配一个或多个整数。这个限制使得Product路由匹配了下面的URL:

    /Product/3
    /Product/8999
    

      

    但是不匹配下面的URL:

    /Product/apple
    /Product
    

      

  • 相关阅读:
    【LeetCode 15】三数之和
    【LeetCode 14】最长公共前缀
    【LeetCode 13】罗马数字转整数
    【LeetCode 12】整数转罗马数字
    【LeetCode 11】盛最多水的容器
    【LeetCode 10】正则表达式匹配
    【LeetCode 9】回文数
    【LeetCode 8】字符串转换整数 (atoi)
    【LeetCode 7】整数反转
    【LeetCode 6】Z 字形变换
  • 原文地址:https://www.cnblogs.com/linsong521/p/4754296.html
Copyright © 2020-2023  润新知