如何开始使用多租户MVC应用程序

时间:2010-02-19 17:42:28

标签: asp.net-mvc multi-tenant

我搜索了一些例子,发现了几个,但它们都是大型项目。我正在寻找一些关于如何开始构建MVC多租户应用程序的示例。我认为,第一部分是破译网址。

在ASP.Net中,我就是这样做的。我从查看DNN代码得到了这个。 我将如何在MVC中执行相同操作?

Global.asax中

private void Application_BeginRequest(Object source, EventArgs e)
{
  HttpApplication application = (HttpApplication)source;
  HttpContext context = application.Context;

  string domainName = string.Empty;
  // domaName now contains 'example' if application.Request was www.example.com
  domainName = GetDomainName(application.Request);

  // Using domain, get the info for example from the database
  object myPortal = // get from database
  // Save in context for use on other pages
  context.Items.Add("PortalSettings", myPortal);
}

然后在我的基页中,我从上下文中获取值。

2 个答案:

答案 0 :(得分:4)

我认为更强大的方法是定义自定义路线。在该自定义路由中,您可以提取域并将其放入路由值中。

然后,您可以拥有定义域属性等的基本控制器(如Josh描述的那样)并在那里存储该值以方便(或者只是按需提取它;无论哪种方式)。

通过预先将其拉入路线值,您可以在应用程序的任何位置沿着请求路径使用该信息,而不仅仅是在控制器中,这样您就可以通过这种方式获得更多的重用。例如,您可以在自定义类似授权的过滤器中使用它来处理用户对该域的权限,等等。

答案 1 :(得分:2)

  1. 获取域名。您使用DNN代码走在正确的轨道上。只需在调试器中查看Request静态变量;那里有各种很酷的东西。
  2. 您可能需要一个用户商店。我使用自定义数据库,但您可以使用Microsoft成员资格提供程序和配置文件提供程序。使域成为用户的属性,或组织的属性,并使组织成为用户的属性。
  3. 将用户的域存储在cookie中,加密。在请求开头读取cookie,并使用户可以访问该组织/域。
  4. 创建一个扩展Controller的BaseController,然后让所有控制器继承它。在BaseController中,重写OnActionExecuting。这是一个比Global.asax.cs的Begin_request更容易进行初始请求操作的地方,因为您可以定义每个控制器都可用的受保护成员。