asp.net-mvc – ASP.NET MVC 3:RouteExistingFiles = true似乎没有任何效果

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.NET MVC 3:RouteExistingFiles = true似乎没有任何效果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在努力了解RouteExistingFiles的工作原理.
所以我创建了一个新的MVC 3互联网项目(MVC 4的行为方式相同),并将一个 HTMLPage.html文件放到我的项目的内容文件夹.
现在我去了Global.Asax文件并编辑了Re​​gisterRoutes函数,看起来像这样:
public static void RegisterRoutes(RouteCollection routes)
{
    routes.RouteExistingFiles = true; //Look for routes before looking if a static file exists

    routes.MapRoute(
            "Default",// Route name
            "{controller}/{action}/{id}",// URL with parameters
            new {controller = "Home",action = "Index",id = UrlParameter.Optional} // Parameter defaults
            );
    }

现在,当我要求一个本地主机:XXXX / Content / HTMLPage.html时,应该给我一个错误,因为没有“内容”控制器,并且该请求绝对命中默认模式.但是我看到我的HTMLPage.
我在这里做错了什么?

更新:
我想我必须放弃.
即使我添加了像这样的路线:

routes.MapRoute("","Content/{*anything}",new {controller = "Home",action = "Index"});

它仍然显示了HTMLPage的内容.
当我请求像〜/ Content / HTMLPage这样的URL时,我按预期得到索引页,但是当我添加一个.html或.txt文件扩展名时,会显示内容(如果该文件不存在,则为404错误) .
如果有任何人可以在VS2012中查看,请告知我们您获得的结果.
谢谢.

解决方法

要启用静态文件的路由,您必须执行以下步骤.

在RouteConfig.cs中启用现有文件的路由

routes.RouteExistingFiles = true;

为您的路径添加一条路径(确保专用路径位于通用路径之上)

routes.MapRoute(
            name: "staticFileRoute",url: "Public/{file}/",defaults: new { controller = "Home",action = "SomeAction" }
        );

接下来配置您的应用程序,以便静态文件的请求由“TransferRequestHandler”处理.在Webconfig下的system.webServer>处理程序中添加以下条目.

<add name="MyCustomUrlHandler2" path="Public/*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

根据您的要求,“路径”的值可以更通用或具体.但我喜欢它总是非常具体,根据需要.保持非常通用将阻止其他站点特定资源的服务,如.js或css文件.例如,如果将以上设置为path =“*”,则甚至请求即使是内部文件夹中的css(内容文件夹中的内容)也是最终在您的控制器的操作中.你不会喜欢的东西

猜你在找的asp.Net相关文章