C#调用REST API时如何将文件附加到form-data表单请求体
C# 前端构造form-data请求上传文件到Azure Blob REST API实现方案
通用实现逻辑
所有C#前端场景(Blazor WASM/Server、WPF、WinForm等)构造form-data请求的核心逻辑一致:
- 先获取待上传文件的流、文件名、MIME类型,Blazor端通过
<input type="file">拿到IBrowserFile对象,桌面端直接读取本地文件得到FileStream - 实例化
MultipartFormDataContent作为请求体容器,完全对应Postman中的form-data格式 - 向容器中添加
StreamContent作为文件字段,字段名要和Postman调用时用的文件字段名完全一致 - 可按需添加其他
StringContent类型的自定义表单参数 - 发送POST请求后反序列化响应内容,即可拿到返回的文件ID和文件类型
完整代码示例(Blazor WASM场景)
<!-- .razor页面文件选择组件 --> <input type="file" @onchange="HandleFileSelect" /> <button @onclick="StartUpload" disabled="@(_selectedFile == null)">上传文件</button>
// .razor.cs后台逻辑 using System.Net.Http.Headers; using System.Text.Json; private IBrowserFile _selectedFile; // 替换为你实际的上传接口地址 private const string UploadEndpoint = "YOUR_AZURE_BLOB_UPLOAD_API_URL"; private readonly HttpClient _httpClient = new HttpClient(); // 接口返回结果结构,字段名需和接口实际返回匹配 public class UploadResponse { public string FileId { get; set; } public string FileType { get; set; } } private void HandleFileSelect(InputFileChangeEventArgs e) { // 限制单次只选一个文件 _selectedFile = e.File; } private async Task StartUpload() { if (_selectedFile == null) return; using var formData = new MultipartFormDataContent(); // 打开文件流,可根据需求调整最大允许上传大小 await using var fileStream = _selectedFile.OpenReadStream(maxAllowedSize: 20 * 1024 * 1024); var fileContent = new StreamContent(fileStream); // 设置文件Content-Type fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse(_selectedFile.ContentType); // 添加到form-data,第二个参数为你Postman中配置的文件字段名,第三个参数为文件名 formData.Add(fileContent, "uploadFile", _selectedFile.Name); // 如有其他自定义表单参数,可按以下方式添加 // formData.Add(new StringContent("testValue"), "customField"); var response = await _httpClient.PostAsync(UploadEndpoint, formData); if (response.IsSuccessStatusCode) { var respStr = await response.Content.ReadAsStringAsync(); var result = JsonSerializer.Deserialize<UploadResponse>(respStr); // 此处可直接使用result中的FileId和FileType做后续业务逻辑 Console.WriteLine($"上传成功,文件ID:{result.FileId},文件类型:{result.FileType}"); } }
注意事项
- 务必保证form-data中添加文件的字段名和Postman调用时使用的字段名一致,否则接口会无法识别到上传的文件
- 超过20MB的大文件建议做分片上传,避免单次请求超时或者触发接口大小限制
- 如果接口返回的JSON字段和你定义的
UploadResponse属性名不一致,可以给属性加[JsonPropertyName("实际字段名")]特性做映射
内容的提问来源于stack exchange,提问作者questionbank
相关产品推荐
相关产品推荐

