【问题标题】:ASP.NET: How can I get the domain name without any subdomains?ASP.NET:如何获取没有任何子域的域名?
【发布时间】:2011-01-02 23:17:42
【问题描述】:

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

例子:

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

提前致谢。

编辑

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

  • .com
  • .ca
  • .local

【问题讨论】:

  • www.thingy.co.uk > thingy.co.uk
  • 澄清一下,您的意思是一种从字符串中包含的 URL 中提取域名的方法?
  • 我稍微澄清了我的问题。

标签: .net dns


【解决方案1】:
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);
}

【讨论】:

  • 我喜欢这个。虽然它不适用于.co.uk,但它应该可以很好地满足我的目的。
  • 它也不适用于本地主机!我正在寻找一种方法来获取任何请求的根域。可能是 localhost,可能是 domain.com,可能是 domain.co.uk
  • @StefanBergfeldt,定义“行不通”。它将为输入“localhost”输出“localhost”。
  • @SimonSvensson 我在尝试使用 localhost 时得到了一个空字符串。
  • 对于“.co.uk”它不起作用。对于本地主机(和其他人)来说,这似乎很完美。
【解决方案2】:

有关允许任意注册的后缀列表,请参阅 here

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

【讨论】:

    【解决方案3】:

    获取顶级域列表,并将每个域与该列表匹配,匹配后仅占用 1 个单词。

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

    【讨论】:

    • 这是一个很长的列表,尤其是如果您还考虑了所有 ccTLD 的话。仍然是唯一可靠的方法,除了可能找到 ccTLD 的列表,然后将其应用到域名的 2 段之外。
    • 问题是有些国家在“顶级”域名中超过1个字,所以你需要想办法通过名称来跟踪,而不是把它们当作co.uk b/ c 这里的 co 不是域名,但是 co.com 可以....
    • @Matthew:这还不够好;不同的 ccTLD 有不同的政策。 wiki.mozilla.org/Public_Suffix_List
    【解决方案4】:

    这是我提出的想法。
    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2013-01-02
      • 2018-11-22
      • 2012-11-02
      • 2017-01-09
      • 2014-11-29
      相关资源
      最近更新 更多