【C#】HTTP中URL编码方式解析
前言:当调用HTTP请求时,通常有get和post两种方式
| 类型 | 位置 | 内容格式 | 常见用途 | 示例 |
|---|---|---|---|---|
| Query 参数 | URL 里(? 后) | key=value&key=value | 标识性参数(如分页、过滤条件) | GET /api/user?id=1 |
| Form-data | 请求体中 | 多段分隔(MIME multipart) | 上传文件、图片、混合数据 | Content-Type: multipart/form-data |
| Urlencoded | 请求体中 | key=value&key=value | 表单提交(纯文本字段) | Content-Type: application/x-www-form-urlencoded |
| Raw JSON | 请求体中 | JSON 字符串 | 现代 API 请求(REST) | Content-Type: application/json |
在传参的时候,有些参数可能带一些特殊字符,比如&,"等等,因此需要编码。
编码方式如下:
| 方法名 | 所属命名空间 | 编码标准 | 常见用途 | 是否限制长度 | 特点 |
|---|---|---|---|---|---|
Uri.EscapeDataString() | System | RFC 3986 | 用于单个参数值 | ✅ 有(约 32,766) | 严格编码规则,推荐用于 query 值 |
Uri.EscapeUriString() | System | RFC 3986 | 用于整条 URL | ✅ 有 | 不会转义 /、?、# |
HttpUtility.UrlEncode() | System.Web | HTML 表单标准 | 表单、查询字符串 | ⚠️ 无显式限制 | ASP.NET 中最常用 |
WebUtility.UrlEncode() | System.Net | HTML 表单标准 | 通用 URL 编码 | ⚠️ 无显式限制 | .NET 4.0+,轻量级 |
HttpUtility.HtmlEncode() | System.Web | HTML 实体 | 防止 XSS 攻击 | ❌ 无限制 | 用于网页显示 |
Uri.UnescapeDataString() | System | RFC 3986 | 解码 | ✅ 有 | 和 EscapeDataString 对应 |
HttpUtility.UrlDecode() | System.Web | HTML 表单标准 | 解码 | ❌ 无限制 | 与 UrlEncode() 配对 |
其中HttpUtility.UrlEncode() 主要用于参数编码,需要有对应的解码;Uri.EscapeDataString()也是用于参数编码,但是可以不解码,因为大部分服务器端框架(包括 ASP.NET、Web API、MVC)在接收请求时,会自动为你解码 URL 参数。
完结撒花~
