use*_*698 13 iis asp.net-mvc static asp.net-mvc-routing
我正在使用MVC4并且需要将这样的请求路由到控制器:
[myapp]/data/fileinfo.xml
这是我配置的路线:
routes.MapRoute(
name: "Data",
url: "Data/{file}",
defaults: new { controller = "Data", action = "fileinfo"}
);
Run Code Online (Sandbox Code Playgroud)
现在,如果URL不包含.xml扩展名,这可以正常工作并将请求路由到我的DataController,但是一旦使用扩展名,IIS就会尝试提供静态文件(而不是路由到我的控制器)和I得到404错误.
我已经在线阅读了大量有关此问题的问题/答案,而且我尝试过的每个解决方案都失败了.
例如,我RouteExistingFiles = true在配置我的RouteCollection时尝试使用,我已经<modules runAllManagedModulesForAllRequests="true" />在web.config中添加了,但无济于事.
如果有人知道我应该尝试什么或者我可能会缺少什么,那将非常感激.我正在使用asp.Net 4.5,VS 2012和IIS 8.0.
Sea*_*nny 11
您可以在以下<system.webServer><handlers>部分中将其添加到web.config中:
<add name="ManagedDllExtension"
path="data/fileinfo.xml"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)
你的路线是
routes.MapRoute(
name: "Data",
url: "Data/fileinfo.xml",
defaults: new { controller = "Data", action = "fileinfo"}
);
Run Code Online (Sandbox Code Playgroud)
还有,<modules runAllManagedModulesForAllRequests="true">但它似乎不适用于MVC4/IIS8(过去在MVC3/IIS7 IIRC中没问题).更多信息在这里.由于每个请求都将通过托管管道进行路由,因此对此会产生性能影响.
HTH