如何使用C#从URL解析域和子域(如果存在)?

时间:2015-06-22 23:57:45

标签: c# asp.net regex

使用C#解析域名和子域名的最佳方法是什么?该解决方案还应该与" localhost"这样在本地开发中就可以像在生产中一样使用相同的代码。

示例和预期结果:

    http(s)://yahoo.com -> domain:yahoo.com | subdomain:
    http(s)://test.yahoo.com -> domain:yahoo.com | subdomain:test
    http(s)://test.testing.yahoo.com -> domain:yahoo.com | subdomain:test.testing
    http(s)://localhost:55555 -> domain:localhost | subdomain:
    http(s)://test.localhost:55555 -> domain:localhost | subdomain:test
    http(s)://test.testing.localhost:55555 -> domain:localhost | subdomain:test.testing
    http(s)://yahoo.com.uk -> domain:yahoo.com.uk | subdomain:
    http(s)://test.yahoo.com.uk -> domain:yahoo.com.uk | subdomain:test

1 个答案:

答案 0 :(得分:3)

例如,无法确定您的子域名是什么:

www.yahoo.com
www2.yahoo.com

wwwwww2子域名是?还有newcastle.sch.uk呢?这是一个域,而不是子域。那个新的.uk顶级域名呢?

至于其他组件,我会像这样使用Uri类:

var url = "http://someuser@test.somedomain.com:1234";
var uri = new Uri(url);

Console.WriteLine(uri.Host);
Console.WriteLine(uri.Port);
Console.WriteLine(uri.Scheme);
Console.WriteLine(uri.UserInfo);

这将输出:

test.somedomain.com
1234
http
someuser