.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)github.io 實際是公共後綴而非註冊域業界標準解決方案是使用 Public Suffix List(由 Mozilla 維护),包含所有公共後綴規則。
| 套件 | 特點 |
|---|---|
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
放棄硬編碼後綴列表,擁抱 PSL 標準與成熟套件,才能構建健壯、可維護的域名解析功能。