ASP.NET WebAPI 中的 PUT 和 DELETE 不允许使用 405 方法
405 Method Not Allowed for PUT and DELETE in ASP.NET WebAPI
我使用 ASP.NET Web API 构建了一些 API 端点。当我尝试执行 PUT 或 DELETE 请求时,出现 405 Method Not Allowed 错误。但它对 GET 和 POST 请求工作正常。
有趣的是,当我在本地 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>
我在这里错过了什么?提前致谢。
如果您使用 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),它将为同一个 verb/method 注册多个处理程序,并且其中一个处理程序正在阻止预期的处理程序处理请求。
因此,WebDAV 正在覆盖您的 HTTP PUT 和 DELETE。在处理 HTTP PUT 请求期间,IIS 调用 WebDAV 模块,当 WebDAV 模块被调用时,它会检查其配置并发现它已被禁用,因此对于任何请求,它都会 return HTTP 405 Method Not Allowed 错误类似于 WebDAV 请求。
要禁用 WebDAV,请将以下内容添加到您的 web.config
<system.webServer>
<modules>
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
我使用 ASP.NET Web API 构建了一些 API 端点。当我尝试执行 PUT 或 DELETE 请求时,出现 405 Method Not Allowed 错误。但它对 GET 和 POST 请求工作正常。
有趣的是,当我在本地 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>
我在这里错过了什么?提前致谢。
如果您使用 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),它将为同一个 verb/method 注册多个处理程序,并且其中一个处理程序正在阻止预期的处理程序处理请求。
因此,WebDAV 正在覆盖您的 HTTP PUT 和 DELETE。在处理 HTTP PUT 请求期间,IIS 调用 WebDAV 模块,当 WebDAV 模块被调用时,它会检查其配置并发现它已被禁用,因此对于任何请求,它都会 return HTTP 405 Method Not Allowed 错误类似于 WebDAV 请求。
要禁用 WebDAV,请将以下内容添加到您的 web.config
<system.webServer>
<modules>
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>