如何在 Web API 应用程序的 IIS 8 (Win Server 2012) 上启用 PUT

How to enable PUT on IIS 8 (Win Server 2012) on Web API app

我是 运行 一个 Web API 本地应用程序。当我将它部署到 Windows Server 2012 时,我可以得到很好的结果 - 但是当我尝试 PUT 时,我得到一个 405.

我看过很多这方面的文章 - 但其中 none 有帮助。

我想要做的就是向启用 PUT 的 Web.Config(在每个应用程序级别)添加一些内容。为什么这么难?

示例post: ASP.NET Web API - PUT & DELETE Verbs Not Allowed - IIS 8

我添加到网络配置的内容:

<system.web>
<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>
</system.web>


<system.webserver>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webserver>

我仍然得到 405。

如何让 PUT 工作?谢谢

我终于通过从服务器上完全卸载 WebDAV 使其正常工作。

无需卸载,您已经删除了 WebDAVModule,但您没有像这样删除处理程序部分中的 WebDEV 处理程序 <handlers><remove name="WebDAV"/></handlers>