WebApi 应用程序:错误 404.0,处理程序静态文件
Posted
技术标签:
【中文标题】WebApi 应用程序:错误 404.0,处理程序静态文件【英文标题】:WebApi Application: Error 404.0, Handler StaticFile 【发布时间】:2014-09-30 11:29:03 【问题描述】:我只是尝试在带有 IIS 7.0 的 Windows 2008R2 上部署一个 WebApi 应用程序,而 IIS 管理器直到现在都没有受到影响。
该应用程序可以在我们的开发服务器(相同的 Win 和 IIS 版本)上轻松运行。在部署服务器上,
.NET Framework 4.5 已安装, ASP.NET 功能已安装并 已安装 Windows 身份验证当我调用一个应该映射到 ASP.NET 的 URL 时,错误是
HTTP Error 404.0
Module IIS Web Code
Notification MapRequestHandler
Handler StaticFile
Error code 0x80070002
Requested URL http://localhost:80/myapp/api/GetUserConfig
Physical Path C:\inetpub\wwwroot\myapp\api\GetUserConfig
Logon Method Negotiate
Logon User ADDOMAIN\Administrator
Handler StaticFile 似乎很重要——据我所知,原因是 ASP.NET 没有正确处理 URL。我可以从哪里开始寻找这个问题的真正根源?
我应该补充一点,其他多个部署都在 Windows 2012 环境中成功。
【问题讨论】:
你看过配置文件了吗?一切看起来都井井有条吗? 您是否启用了iis的静态内容功能?请参阅此博客了解如何操作:brendan.enrick.com/post/IIS-7-Not-Serving-Static-Files 对不起,我误读了您的问题。听起来可能是 ***.com/questions/9703090/… 的副本 【参考方案1】:Microsoft 绝对应该在安装程序的“ASP.NET”功能中添加一个版本。
当您在 Windows 2008 上安装 ASP.NET 功能时,这将启用 ASP.NET 3.5,而我需要 ASP.NET 4。
所以在安装 .NET Framework v4 之后,我会继续向 IIS 注册 ASP.NET 4:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319> .\aspnet_regiis.exe -i
来源:
https://alexanderzeitler.com/articles/HTTP-Error-4040---Not-Found-(MapRequestHandler--StaticFile)-when-deploying-WCF-Web-API-on-IIS-7x/
【讨论】:
请注意:您答案中的链接已失效 @HoàngLong 谢谢,我相应地更新了答案。 我也遇到了同样的问题; IIS 像处理静态文件请求一样处理请求,即使它清楚地映射到控制器操作。但是我有另一个 Web api 应用程序在使用相同应用程序池、相同版本的 .net 等的同一台服务器上正常工作,所以我认为我不会错过任何服务器端软件。 Global.asax 和 Web.config 和 WebApiConfig.cs 文件完全相同。我映射到的控制器操作不需要任何参数。我只是不明白可能是什么原因造成的。 @Shavais 你应该为此提出一个问题。在您提出新问题之前,请确保 bin 文件夹包含所有引用的库。当 bin 文件夹中缺少一个 DLL 时,我遇到了同样的问题。 发表该评论后,我发现使用不包含控制器名称的 url 确实会调用该操作。所以存在某种路由配置问题。但是我正在使用属性路由,并且我在路由模板中使用 controller ..所有这些都与其他运行良好的解决方案完全相同。啊。是的,如果我不能很快在这里弄清楚,我会提出另一个问题。【参考方案2】:我在使用 Owin 时遇到了类似的问题。 Clearing Temporary ASP.NET Files 修复了它。希望这对某人有所帮助。
【讨论】:
【参考方案3】:如果您尝试调用无扩展名的 URL,有一个官方修复程序:https://support.microsoft.com/en-us/help/980368/a-update-is-available-that-enables-certain-iis-7.0-or-iis-7.5-handlers-to-handle-requests-whose-urls-do-not-end-with-a-period
【讨论】:
【参考方案4】:在 IIS 10 (Windows Server 2016) 上的 ASP.Net 4.6.2 中具有相同的行为,但它在 IIS 8.5 (Windows Server 2012 R2) 上工作。结果是 http 404.0,Handler:StaticFile。我通过将 ExtensionlessUrl-handler 添加到 web.config 来解决它:
<handlers>
<remove name="ExtensionlessUrl-Integrated-4.0" />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
name
似乎很重要! name="ExtensionlessUrl-Integrated-4.0"
有效,但 ExtensionlessUrlHandler-Integrated-4.0
无效。
【讨论】:
我运气不好……!!以上是关于WebApi 应用程序:错误 404.0,处理程序静态文件的主要内容,如果未能解决你的问题,请参考以下文章
IIS 7.5 上的 MVC5 路由错误 (404.0) 错误
IIS 7.0 / Windows Server 2008 上的 ASP.NET MVC 3 应用程序出现 404.0 错误