• 对指定磁盘文件路由,而对其他磁盘文件不路由


    在上一个例子中,有路由定义:

            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.RouteExistingFiles = true;
                routes.MapRoute("DiskFile", "Content/StaticContent.html",
                    new { Controller = "Account", Action = "LogOn" },
                    new { customConstraint = new UserAgentConstraint("Chrome") });
                
                routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
                    new { Controller = "Home", Action = "Index", id = UrlParameter.Optional },
                    new { Controller="^H.*", Action="^Index$|^About$",
                    httpMethod = new HttpMethodConstraint("GET")},
                    new[] { "_11_3URLTestDemo.Controllers" });
            }

    因为打开了routes.RouteExistingFiles = true;表明对磁盘文件都要进行路由,但是下面的路由匹配中,对磁盘文件只有一个静态匹配,也就是说只有使用Chrome浏览器对于"~/Content/StaticContent.html"的访问才会匹配到第一个定义的路由,路由到AccountController的LogOn方法上。

    考虑这样的情况:在当前项目(11-3URLTestDemo)的Content文件上Add->New Item->Visual C#->Web->HTML Page,新建一个Hello.html的文件:

    <html>
    <head>
        <title>Hello</title>
    </head>
    <body>
    <h2>Hello,the world.</h2>
    </body>
    </html>

    执行程序,如果发起对"~/Content/Hello.html"的访问,资料上给出的说明是第一个路由不匹配,会匹配第二个路由,也就是将Controller匹配为Content,将Action匹配为Hello.html,由于没有这样的控制器和方法,所以会给出404错误。但实际在实验时,发现这种情况仍然访问到的是Hello.html文件,是否在MVC3中匹配后如果都没有匹配,会自动去寻找有没有该磁盘文件?

    按原意,如果因为去匹配控制器和动作方法导致Hello.html无法访问,解决的方法是设定routes.IgnoreRoute绕过路由。例如:

            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.RouteExistingFiles = true;
                routes.MapRoute("DiskFile", "Content/StaticContent.html",
                    new { Controller = "Account", Action = "LogOn" },
                    new { customConstraint = new UserAgentConstraint("Chrome") });
    
                routes.IgnoreRoute("Content/{filename}.html");
    
                routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
                    new { Controller = "Home", Action = "Index", id = UrlParameter.Optional },
                    new { Controller="^H.*", Action="^Index$|^About$",
                    httpMethod = new HttpMethodConstraint("GET")},
                    new[] { "_11_3URLTestDemo.Controllers" });
            }

    -lyj

  • 相关阅读:
    PHP观察者模式
    php减少损耗的方法之一 缓存对象
    php迭代器模式
    数据库安全措施的改进依据------未实践
    mysql利用phpmyadmin导入数据出现#1044错误 的可能原因
    两列布局的基本思路
    less1.5中的减错误
    ie63像素bug原因及解决办法不使用hack
    镜像翻转二叉树
    判断一个整数是否是 2 的幂次方
  • 原文地址:https://www.cnblogs.com/brown-birds/p/3756685.html
Copyright © 2020-2023  润新知