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 的各个部分。