静态文件忽略ASP.NET MVC4路由

时间:2014-07-05 14:27:07

标签: asp.net-mvc-4 routing

我有一个ASP.NET MVC3应用程序.NET4,其中存在内容文件的路由,这些内容文件是从类库中的资源提供的。 路由配置如下

routes.MapRoute("Resources", "Default{Content}/{*contentpath}", new {controller = "Resource", action="GetResource"});

因此,如果有 DefaultMvcScripts / test.js 请求,则会调用 GetResource 方法。

然而,当转换为MVC4,.NET4.5时,它不再起作用,GetResource不再被调用,它绕过路由,即使我把

routes.RouteExistingFiles = true;

对于请求 DefaultMvcScript / test (没有扩展名),不会忽略路由(我可以看到正在调用GetResource)。

我可以恢复旧的行为,这样即使我指定了一个扩展名,路由也会受到尊重。

2 个答案:

答案 0 :(得分:0)

我认为您只是错过了最后一步 - 您需要配置您的应用,以便处理程序管道能够关注静态文件的请求。

在web配置的system.webserver部分中,您需要为要提供的静态文件添加处理程序。您需要使用TransferRequestHandler

<add name="staticHandler" path="*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersion4.0"/>

有关完整说明,请参阅Jon Galloway的文章 http://weblogs.asp.net/jongalloway/asp-net-mvc-routing-intercepting-file-requests-like-index-html-and-what-it-teaches-about-how-routing-works

答案 1 :(得分:0)

显然,将此添加到web.config会恢复以前的行为:

<modules>
   <remove name="UrlRoutingModule-4.0" />
   <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>

precondition =&#34;&#34;似乎是诀窍。

来源:http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html