【问题标题】:How to do Basecamp-style accounts in Asp.Net Mvc?如何在 Asp.Net Mvc 中做 Basecamp 风格的账户?
【发布时间】:2010-11-26 01:24:36
【问题描述】:

对于 Asp.Net 软件即服务应用程序,我想做基于帐户的子域,例如 Basecamp 和 37Signals 产品的其余部分。例如。 acme.myapp.com 将加载该客户的帐户并仅拉回他们的信息。

这在 Ruby on Rails 中很容易做到,但您将如何在 ASP.NET MVC 中处理此功能并能够扩展到可能数百个帐户?

【问题讨论】:

    标签: asp.net asp.net-mvc multi-tenant saas


    【解决方案1】:

    Maarten Balliauw's blog 介绍了一种扩展 RouteBase 的方法。我想我也看到了用于此的自定义路由处理程序。

    此外,这个StackOverflow question 使用更简单的方法解决了同样的问题。

    我绝对建议将此代码分解到路由端,而不是在控制器中嵌入获取域信息的逻辑。

    【讨论】:

      【解决方案2】:

      我们使用:

      public static string GetSubDomain()
              {
                  string subDomain = String.Empty;
      
                  if (HttpContext.Current.Request.Url.HostNameType == UriHostNameType.Dns)
                  {
                      subDomain = Regex.Replace(HttpContext.Current.Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
                  }
      
                  if (subDomain.Length == 0)
                  {
                      subDomain = "www";
                  }
      
                  return subDomain.Trim().ToLower();
              }
      

      【讨论】:

        【解决方案3】:

        与 RoR 相比,它并没有太大的不同。只需获取 HTTP-Request,获取 Host-Value,将其拆分(在每个点处)并获取第一部分以获取子域。

        string subdomain = requestContext.HttpContext.
                              Request.Headers["Host"].Split('.')[0];
        

        然后只需将子域解析为公司帐户。

        【讨论】:

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