Blazor项目中读取appsettings.json报FileNotFoundException异常
Blazor项目读取appsettings.json异常解决办法
问题本质
Blazor项目(Server或WebAssembly)的运行环境和普通控制台/桌面项目不同,直接用File.ReadAllText("appsettings.json")时,相对路径会被解析为系统根目录(如/appsettings.json),而非项目输出目录,这就是触发FileNotFoundException的核心原因。
解决方案
1. 官方推荐:依赖注入IConfiguration读取(优先使用)
无需手动读取文件,直接利用框架内置配置系统:
- 在
Program.cs中初始化配置:
// Blazor WebAssembly 初始化方式 var builder = WebAssemblyHostBuilder.CreateDefault(args); // Blazor Server 初始化方式 // var builder = WebApplication.CreateBuilder(args); // 直接读取单个配置项 var apiBaseUrl = builder.Configuration["ApiSettings:BaseUrl"]; // 绑定到实体类(更规范的用法) builder.Services.Configure<ApiSettings>(builder.Configuration.GetSection("ApiSettings"));
- 在组件或服务中注入使用:
// 注入IConfiguration直接读取 @inject IConfiguration Config // 或注入IOptions<T>获取绑定后的实体 @inject IOptions<ApiSettings> ApiSettings
2. Blazor Server手动读取文件
如果必须手动读取,需通过AppContext.BaseDirectory获取应用程序基目录,再拼接文件路径:
using System.IO; string baseDir = AppContext.BaseDirectory; string jsonPath = Path.Combine(baseDir, "appsettings.json"); string jsonContent = File.ReadAllText(jsonPath);
3. Blazor WebAssembly手动读取(浏览器环境)
WebAssembly运行在浏览器沙箱中,无法直接用File类读取本地文件,需通过HttpClient获取:
@inject HttpClient Http // 在异步方法中执行 var response = await Http.GetAsync("appsettings.json"); response.EnsureSuccessStatusCode(); string jsonContent = await response.Content.ReadAsStringAsync();
额外检查项
- 确认文件已复制到输出目录:你的
.csproj配置中<CopyToOutputDirectory>Always</CopyToOutputDirectory>是正确的,可前往项目输出目录(如bin/Debug/net8.0/)确认文件存在。 - 移除冗余配置:
.csproj中的<None Remove="appsettings.json" />无需保留,不影响文件复制逻辑。
内容的提问来源于stack exchange,提问作者Haris Tirić
相关产品推荐
相关产品推荐

