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

发布于 2024-09-15 20:49:59 字数 620 浏览 8 评论 0原文

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

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

http:// localhost/flights/878

GET 和 POST 对此 URL 可以正常工作,但 PUT 和 DELETE 会导致 HTTP 501“未实现”。

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

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

那么我可以针对此 URL 使用 PUT 和 DELETE:

http:// localhost / Flightsservice.svc / 878

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

I created a WCF REST (aka WebHttp) service in .NET 4, using Microsoft's WCF REST Service Template 40. I am hosting the service in IIS 6.

The Service Template uses the RouteTable in the Global.asax as a way to create "clean" URL's that don't include ".svc" in them. For example:

http:// localhost / flights / 878

GET and POST work fine against this URL, but PUT and DELETE result in HTTP 501, "Not implemented".

If I create a simple .svc file like this:

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

then I can use PUT and DELETE against this URL:

http:// localhost / flightsservice.svc / 878

Does anyone know if it's possible to get PUT and DELETE to work against the "clean" URL above? It seems that there is no way to configure IIS to allow this because there is no file extension to configure settings for, and I don't want to allow PUT and DELETE globally.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃→可爱长大的 2024-09-22 20:49:59

我已经有一段时间没有使用 IIS6了(而且我没有安装它,所以我在这里失去了记忆),但我必须实现与 IIS6 类似的东西,以便在 IIS6 中路由无扩展 URL。

您可以通过破解 IIS 管理器在逐个文件夹的基础上启用通配符脚本映射。此博文是我遵循的并且效果非常好(这个 链接提供了更多背景信息)。这实际上是管理器中的一个错误,而不是 IIS 本身的错误(至少我是这么告诉自己的)。

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

如果您需要更多信息或者我的记忆力是否衰退,请告诉我。 :) 我希望这有帮助!

I haven't worked with IIS6 in a while (and I don't have it installed, so I'm going off memory here), but I had to implement something similar with IIS6 for routing extensionless URLs in IIS6.

You can enable wildcard script mappings on a folder by folder basis by hacking IIS Manager. This blog post is what I followed and it works really well (and this link provides a little more background). It's really a bug in the Manager, not IIS itself (at least that's what I tell myself).

Can you reference your services in a sub-folder in your site (e.g. http://localhost/services/flight/878)? If so, and if you implement the IIS Manager hack above, I think you can enable all HTTP verbs for that directory. Again, I'm going off memory (and we only implemented GETs and POSTs, so I didn't deal with PUTs and DELETEs), so I hope I'm getting this right.

Let me know if you need more info or if my memory is slipping. :) I hope this helps!

深空失忆 2024-09-22 20:49:59

如果您的 Web 应用程序要部署到多个开发/生产环境,那么最好的方法似乎是在 web.config 级别禁用 WebDAV。为此,请删除 WebDAVModule 和 WebDAV 处理程序,如下例所示:

<system.webserver>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webserver>

If your web application is getting deployed to multiple dev/production environments, then the best way seems to be disable WebDAV at the web.config level. To do this, remove the WebDAVModule and the WebDAV handler as in the below example:

<system.webserver>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webserver>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文