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

C#如何实现向接收IFormFile参数的WebAPI接口上传文件

解决方案

你现有代码的核心问题是:服务端接口使用[FromForm]接收参数,要求请求格式为multipart/form-data,但你当前是把参数序列化为JSON发送,格式完全不匹配,所以无法正常绑定参数。同时客户端不需要将本地文件转换为IFormFile或者FileStreamResult,直接构造表单内容即可完成上传。


调整后完整代码

// 1. 准备业务参数
int scenarioId = 1; // 替换为实际的场景ID值
List<string> localFilePaths = new List<string>
{
    @"C:\本地路径\文件1.docx",
    @"C:\本地路径\文件2.png"
    // 按实际需求添加要上传的本地文件路径
};

try
{
    using HttpClient client = new HttpClient();
    // 2. 构造multipart/form-data格式的表单容器
    using var formContent = new MultipartFormDataContent();
    
    // 3. 添加普通表单字段,和服务端模型的ScenarioId属性对应
    formContent.Add(new StringContent(scenarioId.ToString()), nameof(FileInputModel.ScenarioId));
    
    // 4. 循环添加所有要上传的文件
    for (int i = 0; i < localFilePaths.Count; i++)
    {
        var filePath = localFilePaths[i];
        var fileStream = File.OpenRead(filePath);
        var streamContent = new StreamContent(fileStream);
        // 表单文件字段名需要和服务端模型的UploadFiles属性匹配,符合ASP.NET Core列表绑定规则
        formContent.Add(streamContent, $"{nameof(FileInputModel.UploadFiles)}[{i}]", Path.GetFileName(filePath));
    }
    
    // 5. 发送POST请求
    HttpResponseMessage response = await client.PostAsync(url, formContent);
    response.EnsureSuccessStatusCode(); // 校验请求是否成功
    return response;
}
catch (Exception ex)
{
    // 按需处理异常逻辑
    throw;
}

注意事项

  • 高并发场景下建议使用IHttpClientFactory创建HttpClient实例,避免手动实例化导致的端口耗尽问题
  • 大文件上传建议开启分片逻辑,避免单次请求超时、超过服务端最大请求大小限制
  • 表单字段名必须和服务端FileInputModel定义的属性名完全一致,否则服务端无法正常绑定参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:36:06