zoukankan      html  css  js  c++  java
  • 对指定磁盘文件路由,而对其他磁盘文件不路由

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

            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

  • 相关阅读:
    QD提示软件过期a
    病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
    当UG的License服务器换了后, 客户端如何调整?
    怎样理解构造函数和析构函数
    详解Par2 Files
    Nginx的基本使用和配置
    如何使用bootstrap实现轮播图?
    使用相对长度单位rem布局网页内容
    java中如何对汉字进行排序?
    班级日常分享:一天一瞬间!
  • 原文地址:https://www.cnblogs.com/brown-birds/p/3756685.html
Copyright © 2011-2022 走看看