如何在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 请求配置示例

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

- 在Swagger界面找到目标POST接口,点击
Try it out - 在
TemplateId输入框填入整数ID - 在
Files字段点击Choose Files选择多个文件 - 点击界面顶部
Authorize按钮,输入Bearer令牌并确认 - 点击
Execute发送请求,查看响应结果
内容的提问来源于stack exchange,提问作者Saurabh Soni
相关产品推荐
相关产品推荐

