asp.net mvc プロジェクトでマルチテナントを実装するためのソリューションを見つけました。それが正しいか、より良い方法があるかを知りたいです。
Web リクエストを処理する同じアプリケーションを使用して、より多くの顧客を整理したいと考えています。たとえば、次のようになります。
http://mysite/<customer>/home/index //home is controller and index the action
このため、デフォルトのマップルートを変更しました:
routes.MapRoute(
name: "Default",
url: "{customername}/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
カスタム ActionFilterAttribute を実装しました。
public class CheckCustomerNameFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting( ActionExecutingContext filterContext )
{
var customerName = filterContext.RouteData.Values["customername"];
var customerRepository = new CustomerRepository();
var customer = customerRepository.GetByName( customerName );
if( customer == null )
{
filterContext.Result = new ViewResult { ViewName = "Error" };
}
base.OnActionExecuting( filterContext );
}
}
そしてそれを使用する:
public class HomeController : Controller
{
[CheckCustomerNameFilterAttribute]
public ActionResult Index()
{
var customerName = RouteData.Values["customername"];
// show home page of customer with name == customerName
return View();
}
}
このソリューションを使用すると、顧客名を使用して顧客を切り替え、次のような要求を正しく受け入れることができます。
http://mysite/customer1
http://mysite/customer2/product/detail/2
...................................
このソリューションはうまく機能しますが、最善のアプローチかどうかはわかりません。誰かがより良い方法を知っていますか?