我使用MVC4,需要将这样的请求路由到控制器:
[MYAPP] /data/fileinfo.xml
这是我配置的路由:
routes.MapRoute( name: "Data",url: "Data/{file}",defaults: new { controller = "Data",action = "fileinfo"} );
现在,如果URL不包含.xml扩展名,这样就可以将请求发送到我的DataController,但一旦使用扩展名,IIS会尝试提供一个静态文件(而不是路由到我的控制器),而且得到404错误.
我已经在线阅读了关于这个问题的大量问题/答案,并且我尝试的每个解决方案都失败了.
例如,我在配置我的RouteCollection时尝试使用RouteExistingFiles = true,并且我添加了< 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",action = "fileinfo"} );
还有< modules runAllManagedModulesForAllRequests =“true”>但它似乎不适用于MVC4 / IIS8(曾经在MVC3 / IIS7 IIRC中).更多信息here.还有一个性能影响这一个,因为每个请求将路由通过管理的管道.
HTH