【问题标题】:How to get started with multi-tenant MVC application如何开始使用多租户 MVC 应用程序
【发布时间】:2013-09-25 19:27:44
【问题描述】:

我搜索了一些示例并找到了几个,但它们都是大型项目。我正在寻找一些关于如何开始构建 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);
}

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

【问题讨论】:

    标签: asp.net-mvc multi-tenant


    【解决方案1】:

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

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

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

    【讨论】:

    • Paul,您知道有哪些网站提供了您所建议的示例代码吗?谢谢
    • 不,但是在我看过的每本 MVC 书籍中都很好地记录了自定义路由。我会试着找到一些东西。
    【解决方案2】:
    1. 获取域名。您使用 DNN 代码走在正确的轨道上。只需在调试器中查看 Request 静态变量;那里有各种很酷的东西。
    2. 您可能需要一个用户存储。我使用自定义数据库,但您可以使用 Microsoft 会员提供程序和配置文件提供程序。使域成为用户的财产,或组织的财产,组织成为用户的财产。
    3. 将用户的域存储在 cookie 中,加密。在请求开始时读取 cookie,并使用户有权访问该组织/域。
    4. 制作一个扩展 Controller 的 BaseController,然后让所有控制器都继承自它。在 BaseController 中,覆盖 OnActionExecuting。这是一个比 Global.asax.cs 的 Begin_request 更容易进行初始请求绑定的地方,因为您可以定义每个控制器都可用的受保护成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多