3

参照されている投稿と同じ問題があり(ExtensionlessUrlHandlerが原因でWebAPIの書き換えルールが失敗します)、問題を回避するために何度か試行しましたが、成功しました。私が今立ち往生しているのは次のとおりです。

バックグラウンド:

  • IIS7、リライトモジュールおよびARR(私はリライトおよびARRの初心者です)
  • ASP.Net MVC4(www.foo.com)を使用してWebフロントをホストしているSite1
  • ASP.Net MVC4(svc.foo.com)を使用してWebAPIをホストしているSite2
  • 両方のサイトのコードとサイト構成を完全に制御できます

ゴール:

  • www.foo.com/svc/*をsvc.foo.com/api/*に書き換えます

働く:

  • www.foo.com/svc/somecontroller/0はsvc.foo.com/api/somecontroller/0に正常にマップされます

動作しない:

  • www.foo.com/svc/somecontroller?id=0
  • 失敗したリクエストの追跡をオンにしたところ、書き換えモジュールがURLを書き換えているようですが、何らかの理由でsvc.foo.comにリクエストが送信されません。

詳細:

  • 参照された投稿の問題を回避するために、webapiへのすべての呼び出しの最後に「.s」を追加します(これを実行できるように完全に制御できます-理想的ではありませんが、今のところこれで問題なく動作する必要があります)
  • QSがない場合:www.foo.com/svc/somecontroller/0はwww.foo.com/svc/somecontroller.sになります
  • QSの場合:www.foo.com/svc/somecontroller?id=0はwww.foo.com/svc/somecontroller?id=0.sになります
  • 次に、書き換えルールを使用して「.s」を削除し、svc.foo.com / api / somecontroller/0またはsvc.foo.com/api/somecontroller?id=0を実際に呼び出します。

クエリ文字列形式を使用すると、これが機能しない理由を一生理解できません。

ルールの書き換え:

< rule name="Route requests with QS" stopProcessing="true">
    < match url="^svc/(.*)" />
    < conditions>
        < add input="{QUERY_STRING}" pattern="(.*).s" />
    < / conditions>
    < action type="Rewrite" url="http://svc.foo.com/api/{R:1}?{C:1}" appendQueryString="false" logRewrittenUrl="true" />
< / rule>
< rule name="Route the requests without QS" stopProcessing="true"> 
    < match url="^svc/(.*).s" /> 
    < conditions>
        < add input="{CACHE_URL}" pattern="^(https?)://" /> 
    < / conditions> 
    < action type="Rewrite" url="{C:1}://svc.foo.com/api/{R:1}" logRewrittenUrl="true" /> 
< / rule>

前もって感謝します!

4

1 に答える 1

0

この投稿は私にとってはうまくいきました。 .net Web API アプリケーション内の ARR/URL リライター

ignoreRoutes を追加すると、完全に機能しました。

于 2015-06-14T15:22:14.763 に答える