📅  最后修改于: 2023-12-03 15:13:51.397000             🧑  作者: Mango
在 C# 中,我们可以方便地将字符串转换为 URI,这在处理 URL、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 对象:
string uriString = "https://www.example.com/index.html?param1=value1¶m2=value2#anchor";
Uri uri = new Uri(uriString);
在上述代码中,我们将一个带参数和锚点的 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 对象有很多属性和方法,以下是其中一些常用的:
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¶m2=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 类),最后遍历字典输出每个参数名和对应的值。