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

Blazor Webassembly上传文件报错:参数2无法从MultipartFormDataContent转换为System.IO.Stream

报错原因

你当前调用的PostDescriptionAsync是Swagger自动生成的客户端接口,该方法的第二个入参要求是System.IO.Stream类型,你传入的MultipartFormDataContent和预期类型不匹配,因此触发编译错误。

解决方案
  • 先确认自动生成的PostDescriptionAsync方法的完整参数签名,右键方法名选择「转到定义」即可查看。你后端接口定义为接收[FromForm] IFormFile file,对应生成的客户端方法通常不需要手动构造MultipartFormDataContent,直接传入文件流、文件名两个参数即可,调整代码如下:
// 原async void改为async Task,避免异步执行过程中的异常无法捕获
private async Task LoadFiles(InputFileChangeEventArgs e)
{
    var uploadFile = e.GetMultipleFiles(1).FirstOrDefault();
    if (uploadFile == null) return;

    using var fileStream = uploadFile.OpenReadStream();
    // 按方法签名要求补充所有入参,示例中第二个参数传文件流,第三个参数传文件名即可
    await Client.PostDescriptionAsync(/* 第一个参数按你实际业务补全 */, fileStream, uploadFile.Name);
}
  • 如果你需要手动构造MultipartFormDataContent发送请求,不要使用Swagger生成的PostDescriptionAsync方法,直接调用HttpClient原生方法即可,代码示例如下:
private async Task LoadFiles(InputFileChangeEventArgs e)
{
    using var content = new MultipartFormDataContent();
    foreach (var file in e.GetMultipleFiles(1))
    {
        var streamContent = new StreamContent(file.OpenReadStream());
        // 第二个参数要和后端接口接收的参数名`file`完全一致,第三个参数填文件名
        content.Add(streamContent, "file", file.Name);
    }
    // 替换为你后端接口的实际请求地址
    var response = await _httpClient.PostAsync("/api/xxx/upload", content);
    // 后续处理响应逻辑
}
  • 补充说明:你当前后端接口仅支持单个文件上传,如果需要多文件上传,把后端参数修改为List<IFormFile> files即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:06:01