Blazor WASM项目中如何从App.Client页面添加指向App.Server文件的链接
实现方案
1. 服务端(App.Server)配置
ASP.NET Core默认只会暴露wwwroot目录下的静态文件,你需要额外配置静态文件中间件来开放files目录的访问权限:
- 在App.Server项目的根目录下新建
files文件夹,将你的file.txt放入该文件夹 - 修改App.Server的
Program.cs文件,在默认的app.UseStaticFiles();之后新增如下配置:
using Microsoft.Extensions.FileProviders; // 需先引入该命名空间 // 原有wwwroot静态文件配置保留 app.UseStaticFiles(); // 新增files目录的静态文件访问配置 app.UseStaticFiles(new StaticFileOptions { FileProvider = new PhysicalFileProvider( Path.Combine(builder.Environment.ContentRootPath, "files")), RequestPath = "/server-files" // 自定义的访问路由前缀,可自行修改 });
注意:需将
UseStaticFiles配置放在路由、接口映射相关配置之前,保证静态文件请求优先级更高。
可选:鉴权访问方案
如果你的文件需要登录后才能访问,不建议直接用静态文件中间件公开目录,可以新增接口返回文件,方便做权限校验:
[ApiController] [Route("api/files")] public class FilesController : ControllerBase { [HttpGet("{fileName}")] public IActionResult GetFile(string fileName) { // 此处可添加自定义权限校验逻辑,比如判断当前用户是否有权限访问 var filePath = Path.Combine(Directory.GetCurrentDirectory(), "files", fileName); if (!System.IO.File.Exists(filePath)) return NotFound(); var fileStream = System.IO.File.OpenRead(filePath); // 第二个参数为文件MIME类型,可根据实际文件类型修改 return File(fileStream, "text/plain", fileName); } }
2. 客户端(App.Client)链接写法
如果你的Blazor WASM和服务端是同域部署,直接按配置的路径写a标签即可:
- 静态文件方案的链接:
<!-- 新标签页打开文件 --> <a href="/server-files/file.txt" target="_blank">查看file.txt</a> <!-- 直接下载文件 --> <a href="/server-files/file.txt" download="file.txt">下载file.txt</a>
- 鉴权接口方案的链接:
<a href="/api/files/file.txt" target="_blank">查看file.txt</a>
如果你是前后端分离部署,需要将href替换为服务端的完整域名路径,比如
https://你的服务端域名/server-files/file.txt,同时需要在服务端配置CORS允许跨域访问静态资源/接口。
常见问题排查
- 确认
files目录以及目录下的文件,有ASP.NET Core运行进程的读取权限 - 检查访问路径和服务端配置的
RequestPath是否匹配,不要漏写前缀 - 如果接口路由和静态文件路径冲突,调整
UseStaticFiles的注册顺序到路由注册之前
内容的提问来源于stack exchange,提问作者Ronakße
相关产品推荐
相关产品推荐

