5

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

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

4

3 回答 3

2

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

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

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

于 2009-10-31T05:37:04.110 回答
1

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

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

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

于 2009-09-06T18:49:11.920 回答
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();
        }
于 2009-09-06T18:58:54.383 回答