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

如何在C# HttpClient POST请求中传递多文件与表单参数?

C# 实现带文件上传与Bearer认证的POST API调用

完整代码实现

以下是基于HttpClient的完整实现,支持多文件上传、表单参数传递及Bearer认证:

using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

public class ApiClient
{
    public async Task<string> UploadFilesWithTemplate(string apiEndpoint, string bearerToken, int templateId, params string[] filePaths)
    {
        // 初始化HttpClient,生产环境建议复用实例而非每次创建
        using var httpClient = new HttpClient();
        
        // 设置Bearer认证头
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

        // 构建multipart表单内容(文件上传必须用该格式)
        using var formData = new MultipartFormDataContent();

        // 添加TemplateId表单参数
        formData.Add(new StringContent(templateId.ToString()), "TemplateId");

        // 逐个添加文件到表单
        foreach (var filePath in filePaths)
        {
            if (!File.Exists(filePath))
                throw new FileNotFoundException("指定文件不存在", filePath);

            var fileStream = File.OpenRead(filePath);
            var streamContent = new StreamContent(fileStream);
            
            // 根据实际文件类型设置Content-Type,比如image/png、application/pdf
            streamContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
            
            // 键名"Files"对应API的数组参数,文件名保留原名称
            formData.Add(streamContent, "Files", Path.GetFileName(filePath));
        }

        // 发送POST请求
        var response = await httpClient.PostAsync(apiEndpoint, formData);
        
        // 非2xx状态码直接抛出异常
        response.EnsureSuccessStatusCode();

        // 返回响应内容
        return await response.Content.ReadAsStringAsync();
    }
}

关键注意事项

  • 参数名匹配:若API要求数组参数名为Files[]而非Files,可修改表单键名,上传失败时优先排查此点
  • 文件类型适配:根据上传文件的实际类型调整ContentType,避免默认类型导致的接口报错
  • HttpClient复用:生产环境建议全局复用HttpClient实例,避免频繁创建引发套接字资源耗尽问题
  • 异常扩展:示例仅做基础异常处理,可根据业务需求添加超时、网络异常等捕获逻辑

Postman 请求配置示例

Postman表单与Bearer认证配置截图

  • 请求方法:POST
  • 请求URL:填入你的API端点地址
  • Authorization标签:选择Bearer Token,填入认证令牌
  • Body标签:选择form-data,添加参数:
    • 键:TemplateId,类型Text,填入整数ID值
    • 键:Files,类型File,点击Select Files添加多个文件

Swagger 请求示例

Swagger接口参数与认证示例截图

  1. 在Swagger界面找到目标POST接口,点击Try it out
  2. 在TemplateId输入框填入整数ID
  3. 在Files字段点击Choose Files选择多个文件
  4. 点击界面顶部Authorize按钮,输入Bearer令牌并确认
  5. 点击Execute发送请求,查看响应结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:35:19