asp.net-mvc - 在 MVC4 中路由带有扩展名的 url 将不起作用,尝试提供静态文件

标签 asp.net-mvc iis static asp.net-mvc-routing

我正在使用 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/

相关文章:

asp.net - 加密票证参数的值无效

sql-server - SQL Server登录错误: Login failed for user 'NT AUTHORITY\SYSTEM'

java - 计算在 Java 中调用静态方法的频率

java - 想要静态但不能支持?

iis - Microsoft.Owin.StaticFiles 在控制台主机中工作,但我在文件请求的 IIS 中收到 404

C# "Enum"序列化 - 反序列化为静态实例

c# - MVC 多个 DropDownLists from 1 List<SelectListItem>

asp.net-mvc - 如果被禁用,Html.CheckBox 返回 false,即使被选中

c# - INotifyPropertyChanged,这在 MVC 等 Web 应用程序中如何工作或如何工作?

asp.net-mvc - razor ActionLink 中的 Javascript 变量