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

RestSharp 107.3.0 Query参数URL编码不完整问题求助

RestSharp 107.3.0 URL编码异常问题解决

问题复现

以下是触发问题的核心代码:

var student = new Student()
{
   Code = "123456",
   Name = "CABEÇA, ANNA",
   CourseCode = "CRS00199",
   Enrolled = "2022-07-27 12:25:57"
};

var clientOptions = new RestClientOptions()
{
   BaseUrl = new Uri("https://myapi")
};

var client = new RestClient(clientOptions);

var request = new RestRequest("student/{c}", Method.Put);
request.AddUrlSegment("c", student.Code);
request.AddQueryParameter("n", student.Name);
request.AddQueryParameter("cc", student.CourseCode);
request.AddQueryParameter("e", student.Enrolled);

var url = client.BuildUri(request);
// 实际代码中调用了 url.ToString()

生成的URL存在编码不完整问题:

https://myapi/student/123456?n=CABEÇA%2c ANNA&cc=CRS00199&e=2022-07-27 12%3a25%3a57

预期Ç被编码为%c7,空格也应被编码,但实际未处理。

问题原因

  • RestSharp默认编码规则:RestSharp对Query参数默认仅编码部分ASCII特殊字符(如逗号、冒号),非ASCII字符会保留原样,这是因为它默认遵循application/x-www-form-urlencoded的宽松编码规则,而非严格的URI编码标准。
  • Uri.ToString()的行为:即使RestSharp内部做了部分编码,调用Uri.ToString()时会对已编码的部分做“解码还原”,导致部分编码失效,同时未编码的字符也不会被补充编码。

解决方案

方案1:指定Query参数的编码方式

使用AddQueryParameter的重载,明确指定启用严格URI编码:

// 替换原AddQueryParameter调用,第三个参数设为true启用严格编码
request.AddQueryParameter("n", student.Name, true);
request.AddQueryParameter("cc", student.CourseCode, true);
request.AddQueryParameter("e", student.Enrolled, true);

当第三个参数为true时,RestSharp会对参数值进行严格的URI编码,覆盖所有非安全字符,包括非ASCII字符和空格。

方案2:使用Uri.AbsoluteUri替代ToString()

Uri.AbsoluteUri会返回完全符合标准的编码URI字符串,避免ToString()的解码问题:

var fullUrl = url.AbsoluteUri;

这个方法能保证所有需要编码的字符都被正确处理,即使RestSharp的默认编码有遗漏。

方案3:手动预编码参数值

如果需要更精细的控制,可以手动对参数值进行URI编码后再添加到请求中:

var encodedName = Uri.EscapeDataString(student.Name);
request.AddQueryParameter("n", encodedName);

Uri.EscapeDataString严格遵循RFC 3986标准,会编码所有非安全字符,包括非ASCII字符、空格等。

验证结果

使用上述任一方案后,生成的URL会符合预期:

https://myapi/student/123456?n=CABE%C7A%2C%20ANNA&cc=CRS00199&e=2022-07-27%2012%3A25%3A57

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 09:23:05