IIS 中托管的 WCF REST 服务不支持 PUT 和 DELETE

标签 wcf rest put http-delete

我使用 Microsoft 的 WCF REST 服务模板 40 在 .NET 4 中创建了一个 WCF REST(又名 WebHttp)服务。我在 IIS 6 中托管该服务。

服务模板使用 Global.asax 中的 RouteTable 作为创建不包含“.svc”的“干净”URL 的一种方式。例如:

http://本地主机/航类/878

GET 和 POST 对这个 URL 工作正常,但 PUT 和 DELETE 导致 HTTP 501,“未实现”。

如果我像这样创建一个简单的 .svc 文件:

<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%>

然后我可以对这个 URL 使用 PUT 和 DELETE:

http://本地主机/航类服务.svc/878

有谁知道是否有可能让 PUT 和 DELETE 对上面的“干净”URL 起作用?似乎没有办法配置 IIS 来允许这样做,因为没有文件扩展名来配置设置,而且我不想全局允许 PUT 和 DELETE。

最佳答案

我有一段时间没有使用 IIS6(而且我没有安装它,所以我在这里要关闭内存),但是我必须实现与 IIS6 类似的东西,以便在 IIS6 中路由无扩展名的 URL。

您可以通过入侵 IIS 管理器来逐个文件夹启用通配符脚本映射。此 blog post是我遵循的并且效果很好(这个 link 提供了更多背景)。这确实是管理器中的一个错误,而不是 IIS 本身(至少我是这么告诉自己的)。

您能否在您网站的子文件夹中引用您的服务(例如 http://localhost/services/flight/878)?如果是这样,并且如果您实现了上面的 IIS Manager hack,我认为您可以为该目录启用所有 HTTP 动词。再一次,我要离开内存(我们只实现了 GET 和 POST,所以我没有处理 PUT 和 DELETE),所以我希望我做对了。

如果您需要更多信息或我的内存力下降,请告诉我。 :) 我希望这有帮助!

关于IIS 中托管的 WCF REST 服务不支持 PUT 和 DELETE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3535818/

相关文章:

.net - CollectionDataContract 用于消费 Json 数组

java - Elasticsearch on AWS 用户身份验证

rest - WildFly 管理 - 列出/检测 WildFly 中部署的 REST 端点

java - 同一 WAR 中的多个 JAX-RS 应用程序

java - 带有 @FormParam 的 PUT 方法

c# - WCF 服务继承

wcf - 无法使用 Fiddler 将 JSON 发布数据传递到 WCF REST 服务

post - Backbone.save POST而不是PUT

java - CORS thetransactioncompany 不适用于某一特定路径

rest - 即使指定了 WebGet 属性,WCF 代理仍使用 Post(仅当从另一个 WCF 服务调用时)- 导致 405 错误