我使用 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/