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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:03