C#项目中使用HttpClient发送JSON始终转为表单数据的问题
问题分析与解决方案
以下是可能导致请求以表单数据形式发送的原因及对应解决方法:
未在StringContent创建时明确指定编码与内容类型
你当前单独设置Content-Type的方式理论上可行,但部分场景下可能被默认配置覆盖。建议直接在创建StringContent时一并指定编码和内容类型,避免潜在的头信息冲突:var jsonString = JsonConvert.SerializeObject(workRequest); var content = new StringContent(jsonString, Encoding.UTF8, "application/json");全局HttpClient配置干扰
若你使用的是全局共享的HttpClient实例,之前的代码可能修改了默认请求头或添加了自定义DelegatingHandler,导致请求内容被篡改。排查时可尝试创建全新的HttpClient实例测试,或检查全局配置中是否有修改请求内容的逻辑。JSON序列化异常
验证JsonConvert.SerializeObject(workRequest)生成的字符串是否为有效JSON格式。若序列化结果存在格式错误(如未转义字符、属性缺失),可能导致服务端误判请求类型。实际请求头未正确设置
通过抓包工具(如Fiddler)验证发送的请求是否真的携带了application/json的Content-Type头,同时确认请求体是否为JSON字符串。部分代理或框架可能会自动修改请求头,这时候需要针对性排查。
修正后的完整示例代码:
HttpClient client = new HttpClient(); WorkRequest workRequest = new WorkRequest() { f1 = "asdf", // 补充其他属性赋值 }; var jsonString = JsonConvert.SerializeObject(workRequest); var content = new StringContent(jsonString, Encoding.UTF8, "application/json"); await client.PostAsync(oxxoWorkflowAckUri, content);
内容的提问来源于stack exchange,提问作者user7395346
相关产品推荐
相关产品推荐

