如何允许使用 IIS Express 和 Web API 的 DELETE 方法?

How to allow a DELETE method with IIS Express and Web API?

我正在尝试通过 Fiddler 向我的 Web API 服务发送删除请求,但收到 405 "Method not allowed" 错误。

我已经广泛阅读了关于删除 web.config 中的 "WebDAV" 模块和类似的建议(WebDAV 在我的 applicationhost.config 中未启用),但我尝试过的都没有奏效。

我的服务目前在 IIS Express 10 上 运行(从 Visual Studio 启动)。我的 web.config 文件中确实有这个:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler"
    preCondition="integratedMode,runtimeVersionv4.0"/>

我原以为 verb="*" 部分允许删除,但它似乎不起作用。

另一条注意事项 - 当我检查 Fiddler 中的响应时,在“安全”标题下显示:Allow: GET, POST.

我不确定 "Allow" 参数的设置位置(我是网络新手 API)。

如有任何帮助,我们将不胜感激。请告诉我您需要我提供的其他信息,我会添加。

谢谢!

您可以修改 %userprofile%\documents\IISExpress\config 文件夹中的 IIS Express applicationHost.config。要为无扩展名的 Urls 启用 PUT 和 DELETE,向下滚动到 IIS Express applicationHost.config 文件的底部,并查找以 <add name="ExtensionlessUrl-Integrated-4.0"... 开头的处理程序条目。在 "verb" 属性中添加 PUT 和 DELETE,这样 "verb" 属性看起来像:verb="GET,HEAD,POST,DEBUG,PUT,DELETE"

像这样更新您的网络配置

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- ADD THIS -->
    </modules>

刚刚通过创建一个新的 webapi 项目重现了这个 [targeting .net framework 4.7.1]

通过 Fiddler,我可以在不对 web.config 进行任何更改的情况下点击 DELETE 端点。

请确保使用正确的端点,包括 id 参数。

例如 http:localhost:xxxx/api/values/id // 请包含 id,xxxx 是端口号。

如果在没有 id 的情况下使用 http:localhost:xxxx/api/values ,我会得到相同的结果 405 Method Not Allowed

希望这对您有所帮助。