部署Web API后Delete请求总是报 405(Method Not Allowed)解决办法
WebDAV
安装IIS的时候如果选择了WebDAV(Web Distribution Authorization Versioning) Publish,则所有的Web Site默认会应用WebDAV Module和WebDAV Handler.
WebDAV是基于HTTP协议的扩展,添加了很多Method用于管理服务器上的文件。详见:https://baike.baidu.com/item/WebDAV/4610909?fr=aladdin
WebDAV Module和WebDAV Handler
WebDAV Handler的默认配置是处理如下 Method:PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK。(可以参考%userprofile%/documents/iisexpress/config/applicationhost.config中的配置)因此PUT和DELETE请求会被Dispatch给WebDAV Handler来处理,但是我们一般不会Enable WebDAV功能。因此Delete和Put请求会被拒绝。
解决办法
既然根本原因是WebDAV,最直接的解决办法就是移除WebDAV(一般情况下我们不会用到该功能)。移除有如下几种方法:
- 直接从系统中移除WebDAV Publish的整个功能(参考上面打开WebDAV Publish的截图)
- 在Web Site的web.config中移除WebDAVModule和WebDAVHandler
<system.webServer>
<modules>
<remove name=“WebDAVModule”/>
</modules>
<handlers>
<remove name=“WebDAV”/>
</handlers>
</system.webServer>
顺便提一下,关于asp.net的配置schema参见https://docs.microsoft.com/en-us/iis/configuration/system.webserver/handlers/