问题描述: 在Blazor WebAssembly PWA项目中,使用FromForm绑定IFormFile类型的参数时,无论选择了文件还是不选择文件,该参数始终为空。
解决方法:
Microsoft.AspNetCore.Components.Forms
命名空间,以便使用IFormFile
类型。Startup.cs
文件中,将以下代码段添加到ConfigureServices
方法中,以启用文件上传功能:services.AddControllersWithViews()
.AddNewtonsoftJson();
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddScoped();
InputFile
组件来处理文件上传。确保在组件的@page
指令下引入Microsoft.AspNetCore.Components.Forms
命名空间。示例代码如下:@page "/upload"
@using Microsoft.AspNetCore.Components.Forms
文件上传
@message
@code {
private IFormFile selectedFile;
private string message;
private void HandleFileSelected(InputFileChangeEventArgs e)
{
selectedFile = e.File;
}
private async Task UploadFile()
{
if (selectedFile != null)
{
// 处理文件上传逻辑
// 例如,使用HttpClient将文件发送到服务器
// var fileStream = selectedFile.OpenReadStream();
// await httpClient.PostAsync("upload", new StreamContent(fileStream));
message = "文件上传成功!";
}
else
{
message = "请选择要上传的文件!";
}
}
}
selectedFile
是否为null
来确定是否选择了文件。如果selectedFile
为null
,则表示未选择文件。InputFile
组件来选择文件,并将OnChange
事件绑定到HandleFileSelected
方法,以便在文件选择后更新selectedFile
的值。@onclick
事件中调用UploadFile
方法,该方法将检查selectedFile
的值并执行相应的文件上传逻辑。通过上述解决方法,应该可以解决Blazor WebAssembly PWA项目中使用FromForm绑定IFormFile类型参数时始终为空的问题。