我已经使用ASP.NET Web API构建了一些API终结点。当我尝试执行 PUT 或 DELETE 请求时,出现 405不允许使用方法错误。但这对于 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>
我在这里想念什么?预先感谢。
答案 0 :(得分:1)
如果您使用Visual Studio 2012或更高版本来开发Web API应用程序,则IIS Express是默认的Web服务器。此Web服务器是服务器产品中随附的完整IIS功能的按比例缩小的版本,并且此Web服务器包含为开发方案添加的一些更改。例如,WebDAV模块通常安装在运行IIS完整版的生产Web服务器上,尽管实际上可能没有使用。
IIS的开发版本(IIS Express)安装了WebDAV模块,,但是有意注释掉了WebDAV模块的条目,因此从未在IIS Express上加载WebDAV模块。因此,您的Web应用程序可能会在本地计算机上正常工作,但是在将Web API应用程序发布到生产Web服务器时,您可能会遇到HTTP 405错误。
由于您的DEV服务器具有完整的IIS功能(带有WebDAV),它将为同一动词/方法注册多个处理程序,并且其中一个处理程序正在阻止预期的处理程序处理请求。
因此,WebDAV覆盖了HTTP PUT和DELETE。在处理HTTP PUT请求期间,IIS调用WebDAV模块,在调用WebDAV模块时,它会检查其配置并看到已禁用,因此对于与WebDAV请求类似的任何请求,它将返回HTTP 405 Method Not Allowed错误。
了解更多信息要禁用WebDAV,请将以下内容添加到您的web.config
<system.webServer>
<modules>
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>