跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C Sharp URI 处理
”︁(章节)
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C# URI处理 = == 介绍 == '''URI(统一资源标识符)'''是用于标识和定位网络资源的字符串。在C#中,'''System.Uri'''类提供了处理URI的强大功能,包括解析、构建和验证URI。本章将详细介绍如何在C#中使用'''Uri'''类处理网络编程中的URI操作。 URI的常见形式包括: * '''URL(统一资源定位符)''':如 <code>https://example.com/path?query=value</code> * '''URN(统一资源名称)''':如 <code>urn:isbn:0451450523</code> == Uri类基础 == C#的'''System.Uri'''类封装了URI的解析和操作功能。以下是其核心属性和方法: === 创建Uri对象 === <syntaxhighlight lang="csharp"> // 从字符串创建Uri对象 Uri uri = new Uri("https://example.com:8080/path/to/resource?query=param#fragment"); // 输出各个组成部分 Console.WriteLine($"Scheme: {uri.Scheme}"); // https Console.WriteLine($"Host: {uri.Host}"); // example.com Console.WriteLine($"Port: {uri.Port}"); // 8080 Console.WriteLine($"Path: {uri.AbsolutePath}"); // /path/to/resource Console.WriteLine($"Query: {uri.Query}"); // ?query=param Console.WriteLine($"Fragment: {uri.Fragment}"); // #fragment </syntaxhighlight> === URI组成部分 === <mermaid> pie title URI组成结构 "Scheme" : 15 "Authority" : 30 "Path" : 25 "Query" : 20 "Fragment" : 10 </mermaid> 数学上,URI可以表示为: <math> URI = scheme:[//authority]path[?query][#fragment] </math> == 高级操作 == === URI验证 === <syntaxhighlight lang="csharp"> bool isValid = Uri.TryCreate("https://example.com", UriKind.Absolute, out Uri result); Console.WriteLine(isValid ? "Valid URI" : "Invalid URI"); </syntaxhighlight> === URI编码/解码 === <syntaxhighlight lang="csharp"> string encoded = Uri.EscapeDataString("查询参数 value"); Console.WriteLine(encoded); // 输出: %E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%20value string decoded = Uri.UnescapeDataString("%E6%9F%A5%E8%AF%A2%E5%8F%82%E6%95%B0%20value"); Console.WriteLine(decoded); // 输出: 查询参数 value </syntaxhighlight> === 相对URI与绝对URI === <syntaxhighlight lang="csharp"> Uri baseUri = new Uri("https://example.com/base/"); Uri relativeUri = new Uri("path/to/resource", UriKind.Relative); Uri absoluteUri = new Uri(baseUri, relativeUri); Console.WriteLine(absoluteUri); // 输出: https://example.com/base/path/to/resource </syntaxhighlight> == 实际应用案例 == === 案例1:Web请求中的URI处理 === <syntaxhighlight lang="csharp"> Uri apiUri = new Uri("https://api.example.com/v1/users"); UriBuilder builder = new UriBuilder(apiUri) { Query = "page=2&limit=10" }; HttpClient client = new HttpClient(); HttpResponseMessage response = await client.GetAsync(builder.Uri); </syntaxhighlight> === 案例2:本地文件路径处理 === <syntaxhighlight lang="csharp"> Uri fileUri = new Uri("file:///C:/path/to/file.txt"); Console.WriteLine($"Local path: {fileUri.LocalPath}"); // 输出: C:\path\to\file.txt </syntaxhighlight> == 常见问题 == === 问题1:URI末尾斜线的重要性 === URI <code>https://example.com/api</code> 和 <code>https://example.com/api/</code> 被视为不同资源。 === 问题2:编码差异 === 空格在URI中可以被编码为 <code>+</code> 或 <code>%20</code>,需要根据上下文正确处理。 == 最佳实践 == 1. 始终验证用户输入的URI 2. 使用'''UriBuilder'''类安全地构建URI 3. 考虑使用'''UriKind.Absolute'''或'''UriKind.Relative'''明确指定URI类型 4. 处理国际域名时使用'''IdnMapping'''类 == 总结 == C#的'''Uri'''类提供了完整的URI处理能力,包括: * 解析和构建URI * 验证URI有效性 * 编码和解码URI组件 * 处理相对和绝对URI 掌握这些技能对于网络编程至关重要,特别是在构建Web客户端、API调用或处理文件路径时。 [[Category:编程语言]] [[Category:C Sharp]] [[Category:C Sharp 网络编程]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)