C#中HttpClient传图片与JSON报400错误,Fiddler请求正常求助
解决C# MultipartFormDataContent上传JSON+图片返回400 Bad Request的问题
我帮你找到了问题的根源!你的Fiddler请求和C#代码有两处关键不匹配的地方,导致服务器返回400错误,咱们一步步修正:
1. 图片字段的Name参数完全不符
看你Fiddler里的请求,图片对应的form-data字段名是"fieldNameHere",但你的C#代码里添加图片内容时,把第二个参数(也就是form-data的name属性)写成了"image/jpeg"——这完全不是服务器期望的字段名,这是导致400的核心原因!
2. Boundary格式建议统一(次要但能避免潜在问题)
虽然.NET会自动处理boundary的前缀,但手动指定时,建议和Fiddler用的WebKit风格保持一致(比如用十六进制的Ticks值),这样能减少不必要的格式差异。
修正后的完整代码
var boundary = "----WebKitFormBoundary" + DateTime.Now.Ticks.ToString("x"); // 贴近WebKit的boundary格式 MultipartFormDataContent form = new MultipartFormDataContent(boundary); // 添加JSON部分:字段名和Fiddler里的"application/json"保持一致 StringContent jsonContent = new StringContent(bodyJson); jsonContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); form.Add(jsonContent, "application/json"); // 添加图片部分:修正字段名为"fieldNameHere",文件名也和Fiddler里的"1111.jpg"对齐 var imageContent = new ByteArrayContent(image); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("image/jpeg"); form.Add(imageContent, "fieldNameHere", "1111.jpg"); // 这里建议用await替代.Result,避免UI线程死锁的问题 var response = await _httpClient.PostAsync(url, form); response.EnsureSuccessStatusCode(); // 可以抛出异常快速定位问题
额外调试建议
- 用Fiddler抓一下C#代码发出的请求,和你成功的Fiddler请求逐行对比,确认字段名、boundary、内容格式完全一致。
- 检查
bodyJson字符串是否和Fiddler里的JSON完全相同,有没有多余的转义字符或者语法错误。
内容的提问来源于stack exchange,提问作者Nininea
相关产品推荐
相关产品推荐

