0

マルチテナシー Web サイトがあり、次のようにルーティングを解決する必要があります。

にリクエストが入ります

www.maindomain.com/{site}/{controller}/{action}/{id}

まず、グローバル フィルターが実行され、現在のサイトが ViewData に格納されます。

ViewData["tenant"] = current {controller} request

次に、正しいコントローラー/アクションが実行され、リクエストのサイトを取得できるようになります。

 public class ViewItem : Controller 
 {
   public ActionResult ViewItem(int id) 
   {
     string site = ViewData["tenant"];
     return View("you are viewing the item" + id + " from tenant" + tenant ;
   }
 }

ルーティングを設定する必要があると思いますが、可能ですか?

4

2 に答える 2

1

カスタムを作成しますActionFilter。トリックは、コントローラーのアクション メソッドのOnActionExecutingに呼び出されるメソッドにフックすることです。

public class PropagateTenantToViewDataFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
    }

    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["tenant"] =
            filterContext.RouteData.Values["tenant"];
    }
}

このフィルターをすべてのコントローラーとアクションのグローバル フィルターとして登録します。次の行をファイルのApplication_Startメソッドに追加します。Global.asax.cs

GlobalFilters.Filters.Add(new PropagateTenantToViewDataFilter());

App_Startと を使用している場合は、代わりにFilterConfig次の行を に追加します。RegisterGlobalFilters

filters.Add(new PropagateTenantToViewDataFilter());

ASP.NET MVC のアクション フィルターの詳細については、このページなどを参照してください。

于 2013-06-13T19:40:38.647 に答える
0

Autofac mutli tennancyを見て、私たちの生活がずっと楽になりました。テナント識別戦略を定義し、それを使用して、テナント固有のサービスやコントローラーなどを許可する DI 決定を行うことができます。

于 2013-06-13T14:40:46.420 に答える