2017-12-11 6 views
3

アプリケーションでIISのサイトにあるレスポンスSPAを使用して拡張/置換されているIISでホストされている既存のASP.Net MVCがあります。サブアドレスを保持しているIISのURLリダイレクトSPA

これは、ビジネス上の理由からテナントにすることができず、既存のシステムがWebフォームであり、そのビルドされたシステムがどのようにSPAをサブアプリケーションは新しい機能を配備する最も簡単な方法であると判断されました。別のMVCプロジェクトを望んでいなかったり、合意しなければならない他のクライアント関連のカスタマイズのためにWebApiプロジェクトを静的ページに提供したりしませんでした。

SPAは、それ自体が反応アプリケーションの下にあるアプリケーションである新しいWebApiバックエンドと通信します。それはこのようになりますvisulise支援するため

IIS Manager snip

今、このすべての作品、SPAは、単に通常のhrefとWEBAPIバックエンドに喜んSPA会談で、親アプリからロードすることができます。

私がレンガの壁にぶつかったのは、ユーザーがSPAでF5キーを押してIISがSPA index.htmlを返し、クライアント側のルーティング(反応ルータv4)を返すようにIIS Url書き換えルールを並べ替えることです正しいコンポーネントのレンダリングを処理します。

url書き換えルールは、v5アプリケーションで定義されています。

私はthis onethis oneのような質問のアドバイスに従いました。反応するSPAがサイトのルートにある場合、それは完全に機能しますが、サブアプリケーションに移動するとすぐに404応答完全なURLが見つからないことを示す例URLを要求するときlocalhost/v5/documents IISは存在しないv5/documentsファイル/ディレクトリを見つけようとします。

既存のシステムを外してみると、トップレベルのサイトにコンテンツがなく、反応サイトがv5アプリケーションにあり、apapフォルダ内のwebapiにある新しいフォルダにサイトが展開されていますすべて働いている。

私はいくつかのパターンを試してみましたが、現在使用しているパターンは.*/v5/?.*です。IISマネージャーのテストパターン機能が、私の期待するURLと一致すると教えてくれます。 localhost/v5/documentsのURLは一致する必要がありますが、実際には決してありません。

私が見つけたthis link about configuring angularthisルールを作成することに触れているが、運がないリック・ストラールのポスト。

現時点で私が使用している完全な設定は、私はまた、失敗した要求トレースをインストールしているが、私は、ログを見たとき、私はURL書き換えを要求するために解雇されて表示されていない

<rewrite> 
    <rules> 
    <rule name="Rewrite Text Requests" enabled="true" stopProcessing="true"> 
     <match url=".*/v5/?.*" /> 
     <conditions logicalGrouping="MatchAll"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_URI}" pattern="/api(.*)$" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="{HTTP_HOST}/v5/index.html" logRewrittenUrl="false" /> 
    </rule> 
    </rules> 
</rewrite> 

ですそのため、存在しないファイル/ディレクトリを見つけようとしています。

私が作成-反応するアプリで作成したサイト(私は生産ビルドではないwebpackdevserverを使用してテストしていますが反応し、私は窓10にIIS 10.0.15063.0を使用していhere

を記録失敗した要求トレースをアップロードしました)、WebApiプロジェクトは.Net Framework 4です。7

+1

モジュールの順番を確認しましたか? URLを書き換える前に静的ファイルを実行していますか? – dez

+0

モジュールは正しい順序であり、書き換えルールがあった場所と一致するようにしようとしていました。 – Nathan

答えて

0

あなたは私が考えることができる最も簡単な方法でシナリオを再現しました。

2つのアプリケーション/ v5と/ v5/apiを持つMySiteという名前のWebサイトを作成しました。

web.configファイルには、ルールのURLがV5アプリケーションの下にあるすべてのものと一致したV5

<rewrite> 
    <rules> 
     <rule name="Rewrite Text Requests" enabled="true" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_URI}" pattern="^/v5/api(.*)$" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/v5/index.html" logRewrittenUrl="false" /> 
     </rule> 
    </rules> 
</rewrite> 

のルートディレクトリにあったので、私は、V5アプリケーションのweb.configに次のように置きます。条件は、ターゲットがファイル、ディレクトリ、またはapiアプリケーション内のすべてのものであれば、元に戻すために使用されます。

リライトアクションでホスト名は不要です。

+0

空の親アプリケーションと完全に動作しますが、実際には親アプリケーションのルートwebforms app内のリクエスト(web forms app)ごとに304が返され、index.htmlが与えられます。残念ながら、現在のように仕事を続けるために親アプリが必要です。 – Nathan

+0

親アプリケーション(Webフォームアプリケーション)またはv5アプリケーションのweb.configに設定を入れていますか?私は親アプリケーションのWeb設定が本当にそれよりも高い場合、親アプリケーションが動作しなくなることを期待しています。ただし、v5アプリケーションのweb.configにある場合は、親アプリケーションに影響を与えてはなりません。 –

+0

私は何とかうんざりしてしまい、V5で試してもうまくいかなかったので、説明したように結果がルートで試されました。もう一度やり直してみて、すべてをダブルチェックしてください。反応サイトには完璧に動作し、webformsサイトの追加調整が必要でした – Nathan

関連する問題