0

次の展開要件を持つ ASP.NET MVC アプリがあります。

URL 構造は次のようにする必要があります。

http://server/app/[エンタープライズ]/[コミュニティ]/ {コントローラー}/{アクション}/...

私ができるようにしたいのは、MVC ルート ハンドラーが URL を取得する前に URL をインターセプトし、[エンタープライズ]/[コミュニティ] の部分を削除してから、元の URL が処理されていないかのように MVC が処理を続行できるようにすることです。この 2 つのセグメントが含まれていました。

理由は次のとおりです。

アプリケーションは複数のポータルを複数の顧客 (企業) に公開し、企業内の各コミュニティには独自のユーザー集団があります。この種のスキームは、1 つのアプリケーション インスタンス (binaries、content、web.config) を各 [community] ディレクトリに物理的に展開することによって提供することもできますが、ロジスティクスとパフォーマンスの理由から、この道をたどりたくないと思います。そこで、ルーティングのトリックを使って仮想化しようとしています。

このスキームの進め方、または代替ソリューションに関する提案をいただければ幸いです。

違いがある場合は、IIS 7 を使用しています。

4

2 に答える 2

1

デフォルトルートの前に次のルートを使用できます

routes.MapRoute(
    null,
    "{enterprise}/{community}/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

その後、アクション メソッドで {enterprise} および {community} パラメータを無視できます。

于 2010-07-26T18:55:37.263 に答える
0

IIS Rewrite モジュールを使用した可能な解決策を次に示します。最善の方法ではないかもしれませんが、うまくいくかもしれません。MVC ルーティング内でより簡単で優れたオプションはありますか? わからない。自分でやり始めたばかりです。

http://server.com/app/enterprise/community/controller/action/」を例として使用します。

何が起こるのですか:

  1. URL から文字列を取り除きます。新しい URL: http://server.com/controller/action/
  2. ユーザーを新しい URL にリダイレクトします。ユーザーのブラウザに次のように表示されるようになりました: http://server.com/controller/action/
  3. 新しい URL を受け取り、それを再構築して正しいコンテンツを取得しようとします。ユーザーのブラウザには http://server.com/controller/action/が表示されます。IIS の戻り値: http://server.com/app/enterprise/community/controller/action/

IIS 書き換えモジュールがインストールされると、これらすべてが web.config に含まれます。

<rewrite>
    <rules>
        <clear />

        <rule name="Redirect to remove Offending String" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
            <match url="server.com/app/enterprise/community*" />
            <action type="Redirect" url="/{R:1}" />
            <conditions logicalGrouping="MatchAll">
                <add input="{SERVER_NAME}" pattern="*server.com*" />
            </conditions>
        </rule>

        <rule name="Rewrite to get Original Content" enabled="true" patternSyntax="Wildcard" stopProcessing="false">
            <match url="*" />
            <conditions logicalGrouping="MatchAll">
                <add input="{SERVER_NAME}" pattern="*server.com*" />
            </conditions>
            <action type="Rewrite" url="app/enterprise/community{R:1}" />
        </rule>

    </rules>
</rewrite>

注:これを簡単に実行しただけで、テストしていません。

于 2010-07-23T20:31:24.507 に答える