【问题标题】:ASP.NET MVC. Data driven subdomains?ASP.NET MVC。数据驱动的子域?
【发布时间】:2011-12-25 04:22:53
【问题描述】:

我们正在创建一个多租户 Web 应用程序,我们在其中通过子域(customer1.ourapp.com、customer2.ourapp.com 等)识别租户。

子域的设置必须是数据驱动的 - 即我们不希望每次获得新客户时都必须修改 IIS 配置(手动或编程)。

在 MVC 中,哪里是检查请求中的子域是否有效的最佳位置(即子域存在于数据库的某个表中)

我考虑过的一些选项,

  1. 控制器中的 OnActionExecuting
  2. 在自定义操作过滤器中
  3. IIS 模块
  4. 作为路由设置的一部分 - 一个知道有效子域的自定义路由类 - 类似于这种方法 - http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

我认为从概念上讲这是一个路由任务,所以最后一个选项似乎是正确的??即具有不存在的子域的请求本质上是无效的 url,因此它不应该与路由匹配,而是应该落入 404。这也将允许我们明确定义需要或不需要的路由一个有效的子域。

【问题讨论】:

  • 我认为您可以使用 mvc 路由轻松做到这一点。您将从 HERE 获得所需的信息

标签: c# asp.net-mvc


【解决方案1】:

我之前在我的基本控制器类中这样做过,但是,就像@Jakub 所说,如果您或您的客户此后需要 SSL 证书,那么使用子域将会很昂贵。

            var dotIndex = HostingEnvironment.SiteName.IndexOf('.');
            if (dotIndex > 0)
            {
                var subdomain = HostingEnvironment.SiteName.Substring(0, dotIndex);
                customerCode = subdomain;
            }

【讨论】:

    【解决方案2】:

    我会创建一个自定义操作过滤器并在 Global.asax 中全局注册它(添加新控制器时不用担心)。

    您还可以考虑创建自定义MvcHandler 并在声明路由时指定它。这将允许您指定一些路由(即用于静态内容),这些路由可以在所有客户端之间共享。

    其他解决方案是仅使用路由并坚持使用单个域,因此您不必为通配符域支付昂贵的 SSL 证书。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-03
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 2012-05-27
      • 2010-12-30
      相关资源
      最近更新 更多