PostMan中PUT请求正常,RestSharp中返回400错误的解决问询
解决RestSharp PUT请求JSON解析失败的问题
看起来你遇到的核心问题是RestSharp对JSON请求体做了二次序列化,导致API收到的格式不符合预期,另外我也会给你解决HTTPS抓包的方案,方便以后排查类似问题。
一、修复JSON请求体格式错误
你的错误提示明确说JSON payload无法解析,结合PostMan能正常工作的情况,问题出在AddJsonBody的使用上:
AddJsonBody方法的设计目的是把.NET对象自动序列化为JSON字符串,但你传入的putstr已经是现成的JSON字符串了。这时候RestSharp会把这个字符串当作普通字符串再次序列化,最终发送的请求体是类似"{\"key\":\"value\"}"的格式(外层多了引号,内部引号被转义),API自然无法解析成Customer对象。
修正后的代码
把AddJsonBody替换为AddStringBody,直接发送现成的JSON字符串:
var restclient = new RestSharp.RestClient("https://example.com"); var request = new RestRequest("/customers/" + customerId, Method.PUT); // 保留你的自定义请求头 request.AddHeader("X-AppSecretToken", systemToken); request.AddHeader("X-AgreementGrantToken", userToken); request.AddHeader("Accept", "application/json"); // 用AddStringBody直接发送已格式化好的JSON request.AddStringBody(putstr, ContentType.Json); var response = restclient.Execute(request);
二、解决HTTPS请求抓包问题
如果以后需要对比PostMan和代码的请求差异,可以通过以下步骤让Fiddler/Charles捕获HTTPS流量:
- 配置Fiddler信任证书
- 打开Fiddler,点击
Tools > Options > HTTPS - 勾选
Decrypt HTTPS traffic,按照提示安装Fiddler的根证书,并在系统中信任该证书
- 打开Fiddler,点击
- 让RestSharp使用Fiddler代理
在创建RestClient后添加代理配置:restclient.Proxy = new WebProxy("127.0.0.1", 8888); // Fiddler默认监听端口是8888
这样就能看到完整的HTTPS请求内容,对比PostMan的请求头、请求体差异,快速定位问题。
内容的提问来源于stack exchange,提问作者Lars Holdgaard
相关产品推荐
相关产品推荐

