Uri类不处理协议相对URL

时间:2016-07-01 00:44:54

标签: c# .net url

*编辑:这不会发生在Windows上,而是发生在Mono 4.2.2 Linux(C# Online Compiler)上。

我想解析协议相对URL并获取主机名等。现在我在处理之前向头部插入“http:”,因为C#Uri类无法处理协议相关URL。你能告诉我是否有更好的方法或任何好的图书馆?

    // Protocol-relative URL
    var uriString = "//www.example.com/bluh/bluh.css";
    var uri = new Uri(uriString);
    Console.WriteLine(uriString); // "//www.example.com/bluh/bluh.css"
    Console.WriteLine(uri.Host); // "Empty" string

    // Absolute URL
    var fixUriString = uriString.StartsWith("//") ? "http:" + uriString : uriString;
    var fixUri = new Uri(fixUriString);
    Console.WriteLine(fixUriString); // "http://www.example.com/bluh/bluh.css"
    Console.WriteLine(fixUri.Host); // "www.example.com"

1 个答案:

答案 0 :(得分:2)

这有效:

    Uri uri = null;
    if(Uri.TryCreate("//forum.xda-developers.com/pixel-c", UriKind.Absolute, out uri))
    {
        Console.WriteLine(uri.Authority);
        Console.WriteLine(uri.Host);
    }

返回

forum.xda-developers.com
forum.xda-developers.com

使用Uri(string)构造函数对我有用。