跳到主要内容

C# URI 处理

在 C# 网络编程中,URI(统一资源标识符)是一个非常重要的概念。URI 用于标识和定位网络上的资源,例如网页、文件或 API 端点。C# 提供了强大的工具来处理 URI,使得开发者能够轻松地解析、构建和操作 URI。

什么是 URI?

URI 是用于标识和定位资源的字符串。它通常由以下几个部分组成:

  • Scheme:表示资源的访问协议,例如 httphttpsftp 等。
  • Host:表示资源所在的主机名或 IP 地址。
  • Port:表示访问资源的端口号(可选)。
  • Path:表示资源在主机上的路径。
  • Query:表示传递给资源的查询参数(可选)。
  • Fragment:表示资源中的特定部分(可选)。

例如,以下是一个典型的 URI:

https://www.example.com:8080/path/to/resource?query=param#fragment

C# 中的 URI 类

在 C# 中,System.Uri 类提供了处理 URI 的功能。你可以使用它来解析、构建和操作 URI。

创建 URI 对象

你可以通过传递一个字符串来创建一个 Uri 对象:

csharp
Uri uri = new Uri("https://www.example.com:8080/path/to/resource?query=param#fragment");

解析 URI

Uri 类提供了多个属性来访问 URI 的各个部分:

csharp
Console.WriteLine($"Scheme: {uri.Scheme}");
Console.WriteLine($"Host: {uri.Host}");
Console.WriteLine($"Port: {uri.Port}");
Console.WriteLine($"Path: {uri.AbsolutePath}");
Console.WriteLine($"Query: {uri.Query}");
Console.WriteLine($"Fragment: {uri.Fragment}");

输出:

Scheme: https
Host: www.example.com
Port: 8080
Path: /path/to/resource
Query: ?query=param
Fragment: #fragment

构建 URI

你可以使用 UriBuilder 类来构建 URI。UriBuilder 允许你逐步设置 URI 的各个部分:

csharp
UriBuilder builder = new UriBuilder();
builder.Scheme = "https";
builder.Host = "www.example.com";
builder.Port = 8080;
builder.Path = "/path/to/resource";
builder.Query = "query=param";
builder.Fragment = "fragment";

Uri newUri = builder.Uri;
Console.WriteLine(newUri);

输出:

https://www.example.com:8080/path/to/resource?query=param#fragment

操作 URI

你可以使用 Uri 类的方法来操作 URI。例如,你可以使用 Uri.TryCreate 方法来安全地创建 URI:

csharp
string uriString = "https://www.example.com";
Uri result;
if (Uri.TryCreate(uriString, UriKind.Absolute, out result))
{
Console.WriteLine("URI created successfully: " + result);
}
else
{
Console.WriteLine("Invalid URI");
}

输出:

URI created successfully: https://www.example.com/

实际应用场景

场景 1:解析 API 请求的 URI

假设你正在开发一个 Web API,并且需要解析客户端请求的 URI 来获取查询参数:

csharp
Uri requestUri = new Uri("https://api.example.com/users?name=John&age=30");
string name = System.Web.HttpUtility.ParseQueryString(requestUri.Query).Get("name");
string age = System.Web.HttpUtility.ParseQueryString(requestUri.Query).Get("age");

Console.WriteLine($"Name: {name}, Age: {age}");

输出:

Name: John, Age: 30

场景 2:构建下载链接

你可以使用 UriBuilder 来构建一个下载链接:

csharp
UriBuilder downloadUri = new UriBuilder("https://download.example.com");
downloadUri.Path = "/files/sample.zip";
downloadUri.Query = "token=abc123";

Console.WriteLine("Download link: " + downloadUri.Uri);

输出:

Download link: https://download.example.com/files/sample.zip?token=abc123

总结

在 C# 中处理 URI 是一个常见的任务,尤其是在网络编程中。通过使用 System.UriUriBuilder 类,你可以轻松地解析、构建和操作 URI。无论是解析 API 请求的 URI 还是构建下载链接,掌握这些技能都将对你的开发工作大有裨益。

附加资源

练习

  1. 创建一个 Uri 对象,解析并打印出它的各个部分。
  2. 使用 UriBuilder 构建一个 URI,并尝试添加查询参数和片段。
  3. 编写一个方法,接受一个 URI 字符串作为输入,并返回查询参数的键值对。
提示

在编写代码时,始终考虑 URI 的有效性和安全性,避免潜在的漏洞。