2012-02-02 90 views
1

要对RESTful服务进行版本化,我想使用URL重写模块执行以下操作;IIS7 URL服务版本控制场景的重写规则

地图https://server/service/服务器/服务/ V1/Accept标头(HTTP_ACCEPT?)是application/vnd.mycompany.service + XML

对于服务的下一个版本,我想对撞版本号和部署v2,以便我可以执行以下映射:

https://server/service/映射到server/service/v2 /如果Accept头(HTTP_ACCEPT?)是application/vnd.mycompany.service -2 + xml

我试过下面的规则,但是我不能得到它的工作:

<rules> 
    <rule name="Route request to correct service version" patternSyntax="Wildcard"> 
     <match url="*service*" /> 
     <conditions> 
      <add input="{HTTP_ACCEPT}" pattern="application/vnd.mycompany.*" /> 
     </conditions> 
     <action type="Rewrite" url="Service/v1/{R:2}" logRewrittenUrl="true" /> 
    </rule> 
</rules> 

任何帮助表示赞赏!

--larsw

回答

2

作为陌生的URL重写机制,我不能帮你直接,但是,如果你和Web API托管服务,那么HttpMessageHandler将能够做这样的基于accept头的URL转换。

+0

我们需要在3月份推出v1服务,所以Web API是一个不行。我们稍后可能会从基于WCF 4.0 webHttpBinding的服务重写为Web API。 – larsw 2012-02-02 17:09:04

1

解决了它。

a)不知何故,RedirectModule未在applicationHost.config中连线。 b)在下面的配置工作:

<rule name="Route request to correct service version" patternSyntax="Wildcard">       
    <match url="*service*" />                 
     <conditions logicalGrouping="MatchAny" trackAllCaptures="true">          
      <add input="{HTTP_ACCEPT}" pattern="*application/vnd.mycompany.*" />        
     </conditions>                      
     <action type="Rewrite" url="service/v1{R:2}" logRewrittenUrl="true" />     
</rule> 

c)中的我之前有一个额外的斜线{R:2}导致该重写后的URL为具有双斜杠变量。

--larsw