ASP.NET Web API - 不允許 PUT 和 DELETE 動詞 - IIS 8
我最近從 Visual Studio 2010 升級到了 Visual Studio 2012 RC。安裝程序還會安裝 IIS 8 Express,Visual Studio 現在將其用作預設 Web 伺服器。
IIS 8 阻止了我使用 PUT AND DELETE 動詞的 WEB API 請求。IIS 返回 405 錯誤,
The requested resource does not support http method 'PUT'.我知道人們過去對此有過疑問,並且在 Stack Overflow 上有幾條關於它的消息。使用 IIS 7 Express 的解決方案是解除安裝 WebDav。不幸的是,我沒有看到任何使用 IIS 8 的方法。
我嘗試從 applicationhost.config 中編輯 WebDav 部分,但這沒有幫助。例如,我
<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />從配置文件中刪除。我在這上面花了太長時間。必須有一種簡單的方法來啟用 PUT 和 DELETE?
好的。我終於明白了這一點。您需要跳過一些障礙才能使 PUT 和 DELETE 動詞在 IIS8 中正常工作。事實上,如果您安裝 VS 2012 的候選版本並創建一個新的 WEB API 項目,您會發現範例 PUT 和 DELETE 方法返回 404 錯誤。
要將 PUT 和 DELETE 動詞與 Web API 一起使用,您需要編輯 %userprofile%\documents\iisexpress\config\applicationhost.config 並將動詞添加到 ExtensionlessUrl 處理程序,如下所示:
更改此行:
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />到:
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />除了上述之外,您還應確保 WebDAV 不會干擾您的請求。這可以通過註釋掉 applicationhost.config 中的以下行來完成。
<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> <add name="WebDAVModule" /> <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />另請注意,預設的 Web API 約定是您的方法名稱應與呼叫的 HTTP 動詞相同。例如,如果您要發送 HTTP 刪除請求,則預設情況下,您的方法應命名為 Delete。