4

私は例を探していくつか見つけましたが、それらは全体的に大きなプロジェクトです。MVCマルチテナントアプリケーションの構築を開始する方法のサンプルを探しています。最初の部分はURLを解読することだと思います。

ASP.Netでは、これが私が行った方法です。DNNコードを見てこれを取得しました。MVCで同じことをどのように行いますか?

Global.asax

private void Application_BeginRequest(Object source, EventArgs e)
{
  HttpApplication application = (HttpApplication)source;
  HttpContext context = application.Context;

  string domainName = string.Empty;
  // domaName now contains 'example' if application.Request was www.example.com
  domainName = GetDomainName(application.Request);

  // Using domain, get the info for example from the database
  object myPortal = // get from database
  // Save in context for use on other pages
  context.Items.Add("PortalSettings", myPortal);
}

次に、ベースページでコンテキストから値を取得します。

4

2 に答える 2

4

さらに強力な手段は、カスタム ルートを定義することだと思います。そのカスタムルートでは、ドメインを抽出してルート値に入れます。

次に、Domain プロパティなどを定義し、その値を便宜上そこに格納する (または要求に応じて抽出する、どちらの方法でも) 基本コントローラーを (Josh が説明したように) 持つことができます。

このように事前にルート値にプルすることで、コントローラーだけでなく、リクエスト パスに沿ってアプリ内のどこでもその情報を利用できるため、より多くの再利用が可能になります。たとえば、Authorize のようなカスタム フィルターでそれを使用して、そのドメインに対するユーザーの権限を処理することができます。

于 2010-02-19T19:21:06.420 に答える
2
  1. ドメイン名を取得します。あなたは DNN コードで正しい軌道に乗っています。デバッガーで Request 静的変数をいじるだけです。そこにはあらゆる種類のクールなものがあります。
  2. おそらくユーザーストアが必要になるでしょう。私はカスタム データベースを使用していますが、Microsoft メンバーシップ プロバイダーとプロファイル プロバイダーを使用することもできます。ドメインをユーザーの所有物にするか、組織の所有物にし、組織をユーザーの所有物にします。
  3. ユーザーのドメインを暗号化して Cookie に保存します。リクエストの冒頭で Cookie を読み取り、ユーザーがその組織/ドメインにアクセスできるようにします。
  4. Controller を拡張する BaseController を作成し、それからすべてのコントローラーを継承させます。BaseController で、OnActionExecuting をオーバーライドします。これは、すべてのコントローラーから使用できる保護されたメンバーを定義できるため、Global.asax.cs の Begin_request よりも最初の要求のリギングを行うのがはるかに簡単な場所です。
于 2010-02-19T17:52:18.493 に答える