1

要对 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

4

2 回答 2

2

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

于 2012-02-02T13:29:22.663 回答
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

于 2012-02-02T17:11:23.173 回答