ASP.NET:如何在没有任何子域的情况下获取域名?

时间:2011-01-02 23:17:42

标签: .net dns

我一直在这里搜索,但似乎无法找到这个问题的答案。我有一点时间弄清楚是否有一种方法可以给我HttpContext.Current.Request.Url的主域名?

示例:

http://www.example.com> example.com
http://test.example.com> example.com
http://example.com> example.com

提前致谢。

修改

只是为了澄清一下。这仅适用于我自己的域,不会在现有的每个域上使用 目前我需要处理三个后缀。

  • .COM
  • .CA
  • 。本地

4 个答案:

答案 0 :(得分:7)

public static void Main() {
    var uri = new Uri("http://test.example.com");

    var fullDomain = uri.GetComponents(UriComponents.Host, UriFormat.SafeUnescaped);
    var domainParts = fullDomain
        .Split('.') // ["test", "example", "com"]
        .Reverse()  // ["com", "example", "test"]
        .Take(2)    // ["com", "example"]
        .Reverse(); // ["example", "com"]
    var domain = String.Join(".", domainParts);
}

答案 1 :(得分:1)

请参阅here以获取允许任意注册的后缀列表。

找到该列表中完整域名的最长后缀,然后返回该后缀之前的最后.之后的所有内容。

答案 2 :(得分:0)

获取顶级域名列表,并将每个域名与该列表匹配,匹配后只需1个字词。

(您可能需要为.co添加一些支持。 等...

答案 3 :(得分:0)

这是我想出来的想法 @SLaks,我很想知道你对此的看法。

    ''# First we fix the StackOverflow code coloring issue.
    <Extension()>
    Public Function PrimaryDomain(ByVal url As Uri) As String

        If url.Host.Contains("example.com") Then Return "example.com"
        If url.Host.Contains("example.ca") Then Return "example.ca"
        If url.Host.Contains("example.local") Then Return "example.local"
        If url.Host.Contains("localhost") Then Return "localhost"

        Throw New Exception("The url host was not recognized as a known host name for this domain.")
    End Function