2012-02-02 91 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