ASP.NET中基于帐户的查找

Way*_*ina 5 asp.net-mvc saas

我正在考虑将ASP.NET用于新的SaaS服务,但是为了爱我,我似乎无法弄清楚如何根据大多数SaaS应用程序(例如37Signals)这样的子域进行帐户查找.

例如,如果我提供yourname.mysite.com,那么我如何使用ASP.NET(专门用于MVC)来提取子域,以便我可以加载正确的模板(显示公司名称等)?可以通过常规路由完成吗?

这似乎是SaaS中的常见问题,因此必须有一种简单的方法在ASP.NET中执行此操作; 我知道有些插件可以用于其他框架,比如Ruby on Rails.

Mar*_*ham 3

这对我有用:

    //--------------------------------------------------------------------------------------------------------------------------
    public string GetSubDomain()
    {
        string SubDomain = "";

        if (Request.Url.HostNameType == UriHostNameType.Dns)
            SubDomain = Regex.Replace(Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2");
        if (SubDomain.Length == 0)
            SubDomain = "www";
        return SubDomain;
    }
Run Code Online (Sandbox Code Playgroud)

我假设您希望在同一个 Web 应用程序中处理多个帐户,而不是使用 IIS 中的工具构建单独的站点。在我们的工作中,我们开始为每个子域创建一个新网站,但发现这种方法扩展性不佳 - 特别是当您发布更新然后必须修改数十个网站时!因此,我确实推荐这种方法,而不是上面建议的基于服务器的技术,这是基于多年的经验,完全按照您的建议进行。

上面的代码只是确保这是一个完整形成的 URL(而不是 IP 地址)并返回子域。它在相当大的容量环境中对我们来说效果很好。