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

如何从控制台应用向C# API发送文件?遭400必填字段错误

问题原因及解决方案

核心问题:表单字段名称不匹配

你的API接口接收的IFormFile参数名为request,但客户端上传时指定的表单字段名是"file",ASP.NET Core的模型绑定会严格根据字段名称匹配参数,因此无法找到对应值,导致request为null,触发必填字段的400错误。

具体修复步骤

1. 修正客户端表单字段名称

将客户端代码中content.Add的第二个参数从"file"改为"request",与API的参数名保持一致:

// 原代码
content.Add(new StreamContent(fileStream), "file", fileName);

// 修改后
content.Add(new StreamContent(fileStream), "request", fileName);

2. 优化HttpClient使用(推荐)

不要在循环内重复创建HttpClient,频繁创建会耗尽HTTP连接池,建议在循环外创建一次并复用,同时用using包裹文件流确保资源正确释放:

async Task<List<HttpResponseMessage>> PostFile()
{
    List<HttpResponseMessage> results = new List<HttpResponseMessage>();
    using (var httpClient = new HttpClient())
    {
        foreach (string file in Directory.EnumerateFiles("Fatture\\", "*.xml"))
        {
            using (var content = new MultipartFormDataContent())
            {
                var fileName = Path.GetFileName(file);
                using (var fileStream = File.Open(file, FileMode.Open))
                {
                    content.Add(new StreamContent(fileStream), "request", fileName);
                    var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = content };
                    var result = await httpClient.SendAsync(request);
                    results.Add(result);
                }
            }
        }
    }
    return results;
}

3. 显式指定API参数绑定来源(可选)

在API的IFormFile参数上添加[FromForm]特性,明确告知框架从表单中绑定参数,避免潜在的绑定歧义:

[HttpPost("postFile")]
public IActionResult PostFile([FromForm] IFormFile request, CancellationToken requestAborted)
{
    // 原有业务逻辑不变
}

完成以上修改后,客户端上传的文件就能正确匹配API的参数,400错误即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:26