多租户站点中的路由

时间:2013-06-13 14:32:43

标签: c# .net asp.net-mvc multi-tenant

我有一个多租户网站,我需要解决路由,以便:

请求进入

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 ;
   }
 }

我想我需要配置一些路由,是否可能?

2 个答案:

答案 0 :(得分: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_StartFilterConfig,请将以下行添加到RegisterGlobalFilters

filters.Add(new PropagateTenantToViewDataFilter());

参见例如有关ASP.NET MVC中的Action Filters的更多信息,请this page

答案 1 :(得分:0)

我看Autofac mutli tennancy它让我们的生活变得更轻松。可以定义租户识别策略,并使用它来做出DI决策,允许租户特定服务或控制器等。