多租户站点中的路由
本文关键字:路由 站点 | 更新日期: 2023-09-27 18:18:19
我有一个多站点,我需要解决路由,以便:
请求进入
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 ;
}
}
我想我需要配置一些路由,可以吗?
创建自定义ActionFilter
。诀窍是钩入OnActionExecuting
方法,该方法在控制器中的动作方法之前称为。
public class PropagateTenantToViewDataFilter : IActionFilter
{
public void OnActionExecuted(ActionExecutedContext filterContext)
{
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewData["tenant"] =
filterContext.RouteData.Values["tenant"];
}
}
将此过滤器注册为所有控制器和操作的全局过滤器-将这一行添加到Global.asax.cs
文件中的Application_Start
方法中:
GlobalFilters.Filters.Add(new PropagateTenantToViewDataFilter());
如果您正在使用App_Start
和FilterConfig
,那么将以下行添加到RegisterGlobalFilters
中:
filters.Add(new PropagateTenantToViewDataFilter());
有关ASP中动作过滤器的更多信息,请参见此页。净MVC。
我会看看Autofac多租户,它让我们的生活轻松了很多。可以定义一个租户识别策略,并使用它来做出DI决策,允许特定于租户的服务或控制器等