【问题标题】:405 Method Not Allowed for PUT and DELETE in ASP.NET WebAPI405 方法不允许用于 ASP.NET WebAPI 中的 PUT 和 DELETE
【发布时间】:2019-03-03 12:12:21
【问题描述】:

我已经使用 ASP.NET Web API 构建了一些 API 端点。当我尝试执行 PUTDELETE 请求时,得到 405 Method Not Allowed 错误。但它对 GETPOST 请求运行良好。

有趣的是,当我在本地 IIS 中托管项目时,PUT 和 DELETE 运行良好。它只会在 DEV 服务器中抛出 405 错误。

在我的 web.config 中:

    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
    </httpModules>
  </system.web>
  <system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <validation validateIntegratedModeConfiguration="false" />
    <modules>
      <remove name="ApplicationInsightsWebTracking" />
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
    </modules>
  </system.webServer>

我在这里缺少什么?提前致谢。

【问题讨论】:

  • 是否在 &lt;modules&gt;&lt;remove name="WebDAV" /&gt; 内添加 &lt;remove name="WebDAVModule"/&gt; &lt;handlers&gt; 有帮助?
  • 是的,它解决了我的问题。你能详细说明答案吗?谢谢
  • 你可以参考我的回答here

标签: asp.net asp.net-web-api2


【解决方案1】:

如果您使用 Visual Studio 2012 或更高版本开发 Web API 应用程序,则 IIS Express 是默认的 Web 服务器。此 Web 服务器是服务器产品中提供的完整 IIS 功能的缩小版本,并且此 Web 服务器包含为开发方案添加的一些更改。例如,WebDAV 模块通常安装在运行完整版 IIS 的生产 Web 服务器上,尽管它可能并未实际使用。

IIS 的开发版本 (IIS Express) 安装了 WebDAV 模块,但 WebDAV 模块的条目被故意注释掉,因此 WebDAV 模块永远不会在 IIS Express 上加载。因此,您的 Web 应用程序可能会在本地计算机上正常运行,但在将 Web API 应用程序发布到生产 Web 服务器时可能会遇到 HTTP 405 错误。

由于您的 DEV 服务器具有完整的 IIS 功能(使用 WebDAV),它将为同一个动词/方法注册多个处理程序,并且其中一个处理程序阻止预期的处理程序处理请求。

因此,WebDAV 将覆盖您的 HTTP PUT 和 DELETE。在处理 HTTP PUT 请求期间,IIS 调用 WebDAV 模块,当调用 WebDAV 模块时,它会检查其配置并发现它已被禁用,因此对于任何类似于 WebDAV 请求的请求,它将返回 HTTP 405 Method Not Allowed 错误.

您可以在这里阅读更多内容https://docs.microsoft.com/en-us/aspnet/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications

要禁用 WebDAV,请将以下内容添加到您的 web.config 中

<system.webServer>
 <modules>
  <remove name="WebDAVModule"/>
 </modules>
 <handlers>
  <remove name="WebDAV" />
 </handlers>
</system.webServer>

【讨论】:

  • 很好的解释+1
猜你喜欢
  • 2016-05-06
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2023-03-23
  • 2019-03-05
  • 2014-08-19
  • 2013-04-01
相关资源
最近更新 更多