gpt4 book ai didi

rest - 删除在 WCF 休息服务中不起作用抛出 (405) 方法不允许

转载 作者:行者123 更新时间:2023-12-03 03:28:24 24 4
gpt4 key购买 nike

我创建了 WCF RESTful 服务,该服务背后使用简单的数据库,并且只是尝试处理放置、获取、发布和删除项目。现在 post、put 和 get 正在工作。但删除不起作用。一些论坛告诉我需要禁用 WebDAV 模块。我这样做了,然后我就开始工作了。但我无法让 DELETE 工作。每当我通过我的服务调用 DELETE 动词时,我都会收到以下错误:

远程服务器返回意外响应:(405) 不允许方法。

谁能帮我解决这个问题吗?

最佳答案

对于 PUT 和 DELETE 被覆盖并在其他地方返回 405 以获得 Restful WCF 服务,我还没有找到一个全面的答案,所以我将把它发布在这里。

只需通过角色管理器(在服务器上)或通过添加/删除 Windows 功能从计算机上卸载 WebDAV,即可轻松解决此问题。如果这是一种可以接受的方法,您现在可以停止阅读。

这里通常推荐的修复方法是简单地从您的站点中删除 WebDAV 模块,并将如下内容附加到您的 web.config 中:

  <system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>

这里的问题是,现在您的 WCF 应用程序根本无法知道如何处理 PUT 和 DELETE。因此,为了解决这个问题,一些解决方案建议进行以下修改:

<modules runAllManagedModulesForAllRequests="true">
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>

这对于大多数人来说可能是令人满意的,但我不喜欢让我们的服务在不必要的时候无用地为每个调用加载所有内容的想法。因此,我通过手动将无扩展名 URL 处理程序映射到所有 HTTP 动词来稍微改进了该方法(可能可以改进为仅需要的动词)

  <system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

我只在 R2 64 和 7 64 上测试过这个,所以 ymmv。但希望这会有所帮助。

关于rest - 删除在 WCF 休息服务中不起作用抛出 (405) 方法不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8387282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com