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

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流量:

  1. 配置Fiddler信任证书
    • 打开Fiddler,点击Tools > Options > HTTPS
    • 勾选Decrypt HTTPS traffic,按照提示安装Fiddler的根证书,并在系统中信任该证书
  2. 让RestSharp使用Fiddler代理
    在创建RestClient后添加代理配置:
    restclient.Proxy = new WebProxy("127.0.0.1", 8888); // Fiddler默认监听端口是8888
    

这样就能看到完整的HTTPS请求内容,对比PostMan的请求头、请求体差异,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:14:47