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

如何获取托管在其他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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:45:26