首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 從 URL 精準提取域名:突破 Uri 類別限制的實戰方案

     編輯:關於C語言

問題背景

.NET Uri 類別僅提供 Host 屬性(如 www.google.co.uk),缺乏直接獲取「註冊域名」(如 google.co.uk)的功能。這在需要識別同一組織下不同子域名的場景極為常見。

現有方案的侷限性

作者提供的初版程式碼採用「硬編碼後綴列表」策略:


string[] suffixes = { ".com.cn", ".co.uk", ".com", ".net", ... };
foreach (var suffix in suffixes) {
    if (host.Contains(suffix)) { /* 截取邏輯 */ }
}

缺點明顯:

  • 後綴列表需人工維護,無法覆蓋新頂級域(如 .app, .dev, .ai)
  • 無法處理公共後綴(Public Suffix)規則,如 github.io 實際是公共後綴而非註冊域
  • 效能隨列表增長而下降

現代最佳實踐:Public Suffix List (PSL)

業界標準解決方案是使用 Public Suffix List(由 Mozilla 維护),包含所有公共後綴規則。

推薦 NuGet 套件

套件特點
Nager.PublicSuffix純 .NET 實作,支援快取、自動更新,API 簡潔
DomainParser支援 PSL,提供豐富的域名解析功能
MaxMind.DNSCOM企業級,含 GeoIP 整合

使用範例


using Nager.PublicSuffix;

var parser = new DomainParser();
var domainInfo = parser.Parse("https://www.test.googlepages.com");

Console.WriteLine(domainInfo.RegistrableDomain); // googlepages.com
Console.WriteLine(domainInfo.SubDomain);         // www.test

進階考量

  • IDN 域名:支援國際化域名(Punycode 轉換)
  • 快取策略:PSL 定期更新,建議本地快取並定期同步
  • 效能:Trie 樹結構查找 O(k),k 為域名層級數

總結

放棄硬編碼後綴列表,擁抱 PSL 標準與成熟套件,才能構建健壯、可維護的域名解析功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved