IIS7 URL重写服务版本控制方案的规则

时间:2012-02-02 12:17:32

标签: rest iis-7 url-rewriting versioning url-rewrite-module

要对RESTful服务进行版本化,我想使用URL重写模块执行以下操作;

如果Accept标头(HTTP_ACCEPT?)是application / vnd.mycompany.service + xml

,请将https://server/service/映射到server / service / v1 /

对于下一版本的服务,我想提高媒体类型的版本号,并部署v2,以便我可以进行以下映射:

如果Accept标头(HTTP_ACCEPT?)是application / vnd.mycompany.service-2 + xml

,请将https://server/service/映射到server / service / v2 /

我已经尝试了以下规则,但我无法让它发挥作用:

<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 个答案:

答案 0 :(得分:2)

由于不熟悉URL重写机制,我无法直接帮助您,但是,如果您使用Web API托管服务,那么HttpMessageHandler将能够基于此进行此类URL转换接受标题。

答案 1 :(得分: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