好的。我终于弄清楚了这件事的真相。您需要跳过一些步骤才能使 PUT 和 DELETE 动词在 IIS8 中正常工作。事实上,如果您安装 VS 2012 的候选版本并创建一个新的 WEB API 项目,您会发现示例 PUT 和 DELETE 方法立即返回 404 错误。
要通过 Web API 使用 PUT 和 DELETE 动词,您需要编辑 %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" />
to:
<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”。