Blazor中使用Refit Client上传文件时IFormFile为null的问题
问题分析与解决
核心错误点
你在创建StreamPart时,错误地将表单字段名设置成了文件名,导致后端无法匹配到名为file的IFormFile参数。
修正方案
1. 调整Blazor代码中的StreamPart参数
将StreamPart的第二个参数(表单字段名)改为"file",与后端控制器的参数名严格匹配:
async Task OnChanged(FileChangedEventArgs e) { foreach (var file in e.Files) { using var fs = file.OpenReadStream(); // 用using自动释放流资源 await _api.PostDeployAsync(new StreamPart(fs, "file", file.Name, "application/zip")); } }
2. 确认Refit API定义(当前无需修改)
你的Refit接口定义是正确的,[AliasAs("file")]确保参数映射到表单字段file,配合修正后的StreamPart即可正常传递:
[Multipart] [Post("/api/cluster/deploy")] Task PostDeployAsync([AliasAs("file")] StreamPart stream);
额外注意事项
- 始终用
using包裹文件流,避免资源泄漏; - 若上传大文件,可在
OpenReadStream()中指定最大允许大小,例如file.OpenReadStream(maxAllowedSize: 1024 * 1024 * 100)(限制为100MB); - 确认后端
DisableRequestSizeLimit特性生效,避免因文件大小限制导致接收失败。
内容的提问来源于stack exchange,提问作者DLeh
相关产品推荐
相关产品推荐

