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

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ć

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:55:25