WCF REST服务 - 将所有请求路由到一个操作

时间:2011-12-13 12:10:15

标签: wcf rest

有没有办法可以注册一个路由来处理所有的URL格式并将它们路由到特定的服务操作?

例如:

www.somedomain.com 
www.somedomain.com/anything
www.somedomain.com/anything/anything

依旧......

非常感谢

更新:这太傻了。这是如何做到的:

 [WebGet(UriTemplate = "*")]

但是,这给我带来了另一个问题。假设我使用以下URL:

www.somedomain.com/Segment1/Segment2

它被映射到我的函数(用上面的属性标记) - 但是传入的请求URL看起来像:

www.somedomain.com/Segment1

网址的其余部分无处可寻。

有谁知道如何访问原始网址?在模板匹配改变之前呢?

感谢。

2 个答案:

答案 0 :(得分:2)

如果没有从syneptody的解决方案(上图)中取出任何看似更强大和更强大的解决方案,我设法找出了我正在寻找的UriTemplate:

[WebGet(UriTemplate = "/*")]

这匹配域后面的第一个'/',并提供其余的URL     WebOperationContext.Current.IncomingRequest.UriTemplateMatch

这正是我想要的。 只是因为任何人都在寻找这个....

答案 1 :(得分:1)

这听起来像是在管理层面最好的服务。尝试注册默认路由可能很诱人,但在这种情况下,我建议您查看IIS URL重写模块:

http://learn.iis.net/page.aspx/460/using-the-url-rewrite-module/

此模块功能非常强大,可用于根据通配符或正则表达式重写URL。这将允许您定义一条规则,该规则将来自www.somedomain.com的任何URL重写为服务操作的规范地址。

例如,要简单地将somedomain.com中的任何请求重写为somedomain.com/Segment1,您可以尝试以下内容。 (你可能必须使用通配符)

<rule name="Canonical Host Name" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTP_HOST}" negate="true" pattern="^somedomain\.com*" />
  </conditions>
  <action type="Redirect" url="http://www.somedomain.com/Segment1" redirectType="Permanent" />
</rule>

请记住,此工具非常强大,如果您阅读文档,您将看到几乎可以容纳任何模式的排列。

这是另一篇提供一些例子的文章:

http://blogs.iis.net/ruslany/archive/2009/04/08/10-url-rewriting-tips-and-tricks.aspx