如何获取托管在其他C#服务中的Blazor Server网站当前目录?
获取被其他C#服务托管的Blazor Server网页文件路径
当Blazor Server被外部C#服务托管时,常规的AppDomain、Assembly相关路径获取方法会因为进程上下文差异失效,以下是可行的解决方法:
注入IWebHostEnvironment获取路径
在Blazor组件或服务中通过依赖注入获取IWebHostEnvironment实例,它能直接提供ASP.NET Core宿主的内容根路径和网页根路径:// 组件中注入 @inject IWebHostEnvironment WebHostEnv // 代码内使用 // 获取wwwroot目录(网页静态文件所在路径) var webRootPath = WebHostEnv.WebRootPath; // 获取项目根目录 var contentRootPath = WebHostEnv.ContentRootPath;如果是在后台服务类中,直接在构造函数中注入
IWebHostEnvironment即可使用。在托管服务端配置时指定/获取路径
如果是在托管Blazor的外部C#服务中配置宿主,可以直接设置或读取内容根路径:var host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); // 手动指定内容根路径(可选,默认会取托管进程的相关目录) webBuilder.UseContentRoot(Path.GetDirectoryName(typeof(Startup).Assembly.Location)); // 读取当前配置的内容根路径 var contentRoot = webBuilder.GetSetting(WebHostDefaults.ContentRootKey); }) .Build();关键注意点
- 放弃使用
AppDomain.CurrentDomain.BaseDirectory、Assembly.GetEntryAssembly().Location这类方法:Blazor Server的运行模型导致这些方法无法正确指向网页文件所在目录,会返回空值或无效的/路径。 - 确认发布配置:发布Blazor Server项目时,确保wwwroot目录的内容被正确复制到输出目录,这样基于
WebRootPath拼接的路径才能正确访问到网页文件。
- 放弃使用
内容的提问来源于stack exchange,提问作者Banshee
相关产品推荐
相关产品推荐

