You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么HttpRequestMessage会自动解码我已编码的URL参数字符串

问题原因

这个现象的本质是.NET中Uri类的默认解析逻辑导致的,并非HttpRequestMessage主动对你编码后的字符串做了解码:

  • 你把拼接了编码后参数的路径字符串传入HttpRequestMessage构造函数时,内部会自动将字符串转换为Uri类型对象。Uri类默认会自动将query参数中百分号编码的可打印字符(比如空格对应的%20)做解码处理,因此你在Debug查看RequestUri属性时,看到的就是解码后的Power Tools。
注意事项与解决方案
  • 首先明确:这个绝大多数时候只是展示层面的差异,实际使用HttpClient发送请求时,底层会自动对query参数做标准编码后再传输,并不会直接把未编码的空格发送给服务端,不建议你提前手动对参数做Uri.EscapeDataString编码,容易出现双重编码的问题,直接传入原始参数值让框架自行处理编码即可。
  • 如果你需要确认实际请求的编码情况,不要只依赖RequestUri的Debug展示,建议抓包查看传输的原始请求报文。
  • 如果你确实需要完全自定义编码逻辑,避免Uri自动解码的影响,可以使用UriBuilder构造请求地址,示例如下:
var uriBuilder = new UriBuilder("http://localhost/api/Items/GetAll");
uriBuilder.Query = "category=Power Tools";
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

内容的提问来源于stack exchange,提问作者Randy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:00:03