Uri类不处理与协议相关的URL

本文关键字:URL 协议 处理 Uri | 更新日期: 2023-09-27 17:53:48

*编辑:这不会发生在Windows上,但在Mono 4.2.2 Linux (c#在线编译器)上。

我想解析协议相对URL并获得主机名等。因为c# Uri类无法处理与协议相关的URL,所以在处理它之前,我在头部插入了"http:"。你能告诉我有没有更好的方法或好的图书馆吗?

    // 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"

Uri类不处理与协议相关的URL

这行得通:

    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)构造器