C# URI类

Uri 和UriBuilder 是 System 名称空间中的两个类,它们都用于表示 URI。Uri 类允许分析、组合和比较 URI。而 UniBuilder 类允许把给定的字符串当作 URI 的组成部分,从而构建一个 URI。

下面的代码片段演示了 Uri 类的特性。构造函数可以传递相对和绝对 URL。这个类定义了几个只读属性,来访问 URL 的各个部分,例如模式、主机名、端口号、查询字符串和 URL 的各个部分:.

public static void UriSample(string url) 
{
  var page = new Uri(url);
  Console.WriteLine($"scheme: {page.Scheme}");
  Console.WriteLine($"host: {page.Host}, type: {page.HostNameType}, " +
    $"idn host: {page.IdnHost}");
  Console.WriteLine($"port: {page.Port}");
  Console.WriteLine($"path: {page.AbsolutePath}"); 
  Console.WriteLine($"query: {page.Query}");
  
  foreach (var segment in page.Segments)
  {
    Console.WriteLine($"segment: {segment}");
  }
  //...
}

运行应用程序,传递下面的URL和包含一个路径和查询字符串的字符串:http://www.amazon.com/ Professional-C-6-0-Christian-Nagel/dp/111909660X/ref=sr_1_4?ie=UTF8&qid=1438459506&sr=8-4&keywords=professional+c%23+6。

将得到下面的输出:

scheme: http
host: www.amazon.com, type: Dns, idn host: www.amazon.com 
port: 80
path: /Professional-C-6-0-Christian-Nagel/dp/111909660X/ref=sr_1_4 
query: ?ie=UTF8&qid=1438459506&sr=8-4&keywords=professional+c%23+6 
segment: /
segment: Professional-C-6-0-Christian-Nagel/ 
segment: dp/
segment: 111909660X/ 
segment: ref=sr_1_4

与 Uri 类不同,UriBuilder 定义了读-写属性,如下面的代码片段所示。可以创建一个 UriBuilder 实例,指定这些属性,并得到一个从 Uri 属性返回的 URL:

public static void UriSample(string url)
{
  //...
  var builder = new UriBuilder();
  builder.Host = "www.cninnovation.com"; 
  builder.Port = 80;
  builder.Path = "training/MVC"; 
  Uri uri = builder.Uri; 
  Console.WriteLine(uri);
}

除了使用 UriBuilder 的属性之外,这个类还提供了构造函数的几个重载版本,其中也可以传递 URL 的各个部分。