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 に答える