如何在Asp.Net Mvc中进行Basecamp风格的账户?

时间:2009-09-06 18:24:22

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

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

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

3 个答案:

答案 0 :(得分:2)

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

此外,这个StackOverflow question使用更简单的方法涵盖了相同的问题。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

我们使用:

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