有没有办法可以注册一个路由来处理所有的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
网址的其余部分无处可寻。
有谁知道如何访问原始网址?在模板匹配改变之前呢?
感谢。
答案 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