在MVC4中使用扩展名路由URL将无法正常工作,尝试提供静态文件

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