我正在使用 MVC4,需要将这样的请求路由到 Controller :[myapp]/data/fileinfo.xml
这是我配置的路由:
routes.MapRoute(
name: "Data",
url: "Data/{file}",
defaults: new { controller = "Data", action = "fileinfo"}
);
现在,如果 URL 不包含 .xml 扩展名,这可以正常工作并将请求路由到我的 DataController,但一旦使用扩展名, IIS 尝试提供静态文件 (而不是路由到我的 Controller ),我收到 404 错误。
我在网上阅读了大量关于这个问题的问题/答案,我尝试过的每个解决方案都失败了。
例如,我尝试使用
RouteExistingFiles = true
在配置我的 RouteCollection 时,我添加了 <modules runAllManagedModulesForAllRequests="true" />
在 web.config 中,但无济于事。如果有人知道我应该尝试什么或我可能会遗漏什么,我们将不胜感激。我正在使用 asp.Net 4.5、VS 2012 和 IIS 8.0。
最佳答案
您可以将其添加到 <system.webServer><handlers>
中的 web.config 中。部分:
<add name="ManagedDllExtension"
path="data/fileinfo.xml"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
你的路线是
routes.MapRoute(
name: "Data",
url: "Data/fileinfo.xml",
defaults: new { controller = "Data", action = "fileinfo"}
);
还有
<modules runAllManagedModulesForAllRequests="true">
但它似乎不适用于 MVC4/IIS8(过去在 MVC3/IIS7 IIRC 中没问题)。更多信息 here .这也会对性能产生影响,因为每个请求都将通过托管管道进行路由。HTH
关于asp.net-mvc - 在 MVC4 中路由带有扩展名的 url 将不起作用,尝试提供静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16886093/