我有一个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)。
我可以恢复旧的行为,这样即使我指定了一个扩展名,路由也会受到尊重。
答案 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