【问题标题】:Routing in multitenancy site多租户站点中的路由
【发布时间】:2013-06-14 03:45:49
【问题描述】:

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

一个请求进入

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

我觉得我需要配置一些路由,可以吗?

【问题讨论】:

  • tenant 变量填充在哪里?
  • 只需在解决方案资源管理器中添加区域...
  • ViewData["tenant"] 是在全局过滤器中定义的,带有请求 url 的当前 {site}
  • maxs87,我不明白你的答案,你能给我一个链接吗?

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


【解决方案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"];
    }
}

将此过滤器注册为所有控制器和操作的全局过滤器 - 将此行添加到 Global.asax.cs 文件中的 Application_Start 方法中:

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

如果您使用的是App_Start 和FilterConfig,则将以下行添加到您的RegisterGlobalFilters:

filters.Add(new PropagateTenantToViewDataFilter());

参见例如this page 了解有关 ASP.NET MVC 中的操作过滤器的更多信息。

【讨论】:

  • 很好,我认为使用操作链接会出现问题,但他们将当前租户保留在 url 上。
【解决方案2】:

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

【讨论】:

  • 很好,但我需要一个快速的解决方案,我已经使用其他多租户设计开发了网站,现在我需要做一个简单的更改...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多