【发布时间】:2014-01-24 13:14:12
【问题描述】:
我有一个在 IIS 8.5 下运行的 ASP.NET MVC 4 应用程序。我之前在 MVC 中对这些场景的理解/经验是,如果存在静态文件,则会对其进行服务。如果它不存在,路径将通过MVC路由发送。这是期望的行为,但似乎没有发生。
默认情况下,如果我在 /blah.html 和 no 对应的静态文件创建一个包罗万象的路由,IIS 会提供 404(由 StaticFile 处理程序提供)。 MVC 路由永远不会被命中。如果文件存在,则提供。
所以,我做了一些谷歌搜索并与同事聊天,并想出了这里发布的答案:
https://*.com/a/14327897/1043198
进入处理程序:
<add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
太棒了!该请求现在到达 MVC 应用程序,并且我的动态内容按预期提供。除了现在,当我放置一个物理文件时,我再次收到错误。带有以下信息(仅此而已)的无意义的 500 错误:
模块: ManagedPipelineHandler
通知: ExecuteRequestHandler
处理程序: ApiURIs-ISAPI-Integrated-4.0
错误代码: 0x800703e9
发生了什么事?为什么当静态文件不存在时 IIS 不回退到我的 MVC 应用程序,当我修复它时,为什么会发生相反的情况并且不再正确提供静态文件?我很确定这在过去一直是默认行为。
应用程序池以集成模式运行,CLR v4.0。
【问题讨论】:
标签: asp.net-mvc-4 iis-8