【问题标题】:WebApi Application: Error 404.0, Handler StaticFileWebApi 应用程序:错误 404.0,处理程序静态文件
【发布时间】: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 环境中成功。

【问题讨论】:

标签: c# asp.net .net iis asp.net-web-api


【解决方案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】:
    【解决方案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 无效。

    【讨论】:

    • 我运气不好……!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2011-07-21
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多