1

エリアに分割されたMVC3ソリューションがあります。たとえば、次の方法でアプリケーションにアクセスできます。//myapp/または//myapp/externalまたは//myapp/internal。IIS 7で達成しようとしているのは、デフォルトのURL(私の場合は// myapp)を// myapp/internalに設定することです。

したがって、誰かが// myappに移動すると、// maypp / internalにリダイレクトされます(internalは、MVCで設定した領域の名前です)。

私は、global.asaxではなく、サーバーでこれを行う方法を本当に探しています。その理由は、このアプリは複数のサーバー上にあり、アプリをデプロイする必要があるたびにデフォルトルートを変更する必要がないためです。

助けてくれてありがとう。

4

2 に答える 2

0

最も簡単な方法は、//myapp/internal へのユーザーを 301 にするデフォルトのコントローラーを //myapp/ に作成することです。mydomain.com と入力しても突然何も表示されない人は常にいます。

または、空白に一致するメインの Global.asax.cs に特定のルートを作成し、指定されたコントローラー、アクション、およびエリアにルーティングします。ただし、これは「領域は完全に分離されている」という概念をかなり沈めます。

于 2012-05-29T19:30:41.657 に答える
0

私は次の方法で問題を解決しました:

を。Web.Internal.config ファイルに、次の変換を追加しました。

<appSettings>
    <add key="Environment" value="Production Internal(Live)" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>         

ソリューションを内部サイトにデプロイすると、Web.config の環境値が "Production Internal(Live)" で上書きされます

b. 次に、デフォルトのコントローラーとアクションにチェックを追加して、Web.config の環境値を検索しました。

var InternalorExternalSite = Convert.ToString(ConfigurationManager.AppSettings["Environment"]);

if (InternalorExternalSite == "Production Internal(Live)")
    {
        return RedirectToAction("", "", new { area = "Internal" });
    }

上記のコードは、私の場合、環境値が「Production Internal(Live)」と等しいかどうかを確認し、リクエストを「Internal」エリアにリダイレクトします。

内部ユーザーが http://www.internalsite.com に移動する、エリアhttp://www.internalsite.com/internalにリダイレクトされます

外部ユーザーがhttp://www.externalsite.comに移動すると、どの領域にもリダイレクトされませんが、必要に応じて、上記に基づいてユーザーを任意の領域にリダイレクトできます。

于 2012-07-11T18:09:17.807 に答える