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

将Curl POST请求转换为C# .NET WebApi调用遇500错误求助

解决Curl转C#/.NET时的API 500错误问题

问题背景

原可正常运行的Curl请求:

curl -X POST http://jasserver:8010/jderest/file/upload --form file="@C:\temp\test.pdf;type=application/pdf" --form moAdd="@C:\temp\upload.json;type=application/json"

Postman生成的C#代码返回500错误(代码如下):

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "http://webserver.domain.com:8010/jderest/file/upload");
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead(@"C:\temp\test.pdf")), "file", @"C:\temp\test.pdf");
content.Add(new StreamContent(File.OpenRead(@"C:\temp\upload.json")), "moAdd", @"C:\temp\upload.json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

错误原因

原Curl请求中,每个表单字段都明确指定了Content-Type(file对应application/pdf,moAdd对应application/json),但Postman生成的代码未为StreamContent设置该头信息,导致API无法正确解析请求的文件类型,从而返回500错误。

修正后的C#代码

using var client = new HttpClient();
using var pdfStream = File.OpenRead(@"C:\temp\test.pdf");
using var jsonStream = File.OpenRead(@"C:\temp\upload.json");

var request = new HttpRequestMessage(HttpMethod.Post, "http://jasserver:8010/jderest/file/upload");
var content = new MultipartFormDataContent();

// 处理PDF文件,设置正确的Content-Type
var pdfContent = new StreamContent(pdfStream);
pdfContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
content.Add(pdfContent, "file", Path.GetFileName(@"C:\temp\test.pdf"));

// 处理JSON文件,设置正确的Content-Type
var jsonContent = new StreamContent(jsonStream);
jsonContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
content.Add(jsonContent, "moAdd", Path.GetFileName(@"C:\temp\upload.json"));

request.Content = content;

var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

关键修改点

  • 为每个StreamContent手动设置ContentType,完全匹配原Curl中的type参数
  • 使用using语句管理HttpClient和文件流,避免资源泄漏
  • 表单字段名(file、moAdd)与原Curl保持一致
  • 仅传递文件名(而非完整路径)作为表单字段的文件名参数,与Curl行为一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:13:18