📜  c# 将字符串转换为 uri - C# (1)

📅  最后修改于: 2023-12-03 15:13:51.397000             🧑  作者: Mango

C# 将字符串转换为 URI

在 C# 中,我们可以方便地将字符串转换为 URI,这在处理 URL、URI 参数等场景中非常有用。下面介绍一些相关知识以及实现方法。

什么是 URI

URI(Uniform Resource Identifier),即统一资源标识符,用于标识互联网上的资源,比如网页、图片等。URI 又可以分为 URL 和 URN 两种形式,其中 URL(Uniform Resource Locator)表示资源的位置,例如 https://www.example.com/index.html;URN(Uniform Resource Name)表示资源的名称,例如 urn:isbn:0-486-27557-4

在 C# 中,我们通常使用 Uri 类来处理 URI 相关的内容。

如何将字符串转换为 Uri

我们可以使用 Uri 类的构造函数,将一个字符串转换为 Uri 对象:

string uriString = "https://www.example.com/index.html?param1=value1&param2=value2#anchor";
Uri uri = new Uri(uriString);

在上述代码中,我们将一个带参数和锚点的 URI 字符串转换为 Uri 对象,这样就可以方便地处理 URI 的各个部分(比如获取参数)了。

Uri 构造函数的重载

Uri 类的构造函数有多个重载,其参数可以是字符串、Uri 实例、拼接字符串、多个字符串等。以下是一些常用的构造函数:

  • Uri(string uriString): 将一个字符串转换为 Uri 对象。
  • Uri(string baseUri, string relativeUri): 将一个基础 URI 和一个相对 URI 组合成一个绝对 URI。
  • Uri(Uri baseUri, string relativeUri): 将一个基础 URI 和一个相对 URI 组合成一个绝对 URI。
  • Uri(string uriString, UriKind uriKind): 按指定的 UriKind 类型将一个字符串转换为 Uri 对象,UriKind 参数可以是 Absolute、Relative 或 AbsoluteOrRelative。
  • ...

详见 Uri 类的 MSDN 文档:https://docs.microsoft.com/en-us/dotnet/api/system.uri?view=net-5.0

Uri 的属性和方法

Uri 对象有很多属性和方法,以下是其中一些常用的:

  • AbsolutePath: 获取 URI 的绝对路径部分。
  • AbsoluteUri: 获取 URI 的绝对路径和查询字符串部分。
  • Authority: 获取 URI 的验证信息和主机部分。
  • Host: 获取 URI 的主机名部分。
  • Port: 获取 URI 的端口号部分。
  • Query: 获取 URI 的查询字符串部分。
  • Scheme: 获取 URI 的协议方案部分。
  • LocalPath: 获取 URI 的本地路径部分(即去除主机名和查询字符串的部分)。
  • GetComponents(UriComponents components, UriFormat format): 获取 URI 的指定部分,如 Scheme 或 Host 等。
  • TryCreate(string uriString, UriKind uriKind, out Uri result): 尝试将一个字符串转换为 Uri 对象,并返回转换结果和是否成功的状态。

更多属性和方法详见 MSDN 文档。

示例代码

下面是一个简单的示例代码,演示如何从一个 URI 字符串中提取出其参数部分:

string uriString = "https://www.example.com/index.html?param1=value1&param2=value2#anchor";
Uri uri = new Uri(uriString);
string queryString = uri.Query; // 获取查询字符串部分
var queryDictionary = System.Web.HttpUtility.ParseQueryString(queryString); // 将查询字符串转换为字典
foreach (string key in queryDictionary.Keys)
{
    Console.WriteLine("{0}: {1}", key, queryDictionary[key]);
}

在上述代码中,我们先获取 URI 的查询字符串部分,然后将其转换成一个字典(使用了 System.Web 命名空间下的 HttpUtility 类),最后遍历字典输出每个参数名和对应的值。

参考资料