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

.NET 8 Blazor WebAssembly中appsettings.json未加载致空引用异常求助

Blazor WebAssembly .NET 8 appsettings.json未加载问题排查与解决

空引用异常的直接原因是builder.Configuration.GetValue<string>("BaseApiUrl")返回了null,导致创建Uri时触发异常。问题出在配置文件的加载逻辑上:

核心原因

.NET 8 Blazor WebAssembly中,WebAssemblyHostBuilder.CreateDefault(args)默认只会加载项目根目录(与Program.cs同级)的appsettings.json、appsettings.{环境名}.json等配置文件,而你把appsettings.json放在了wwwroot文件夹下,这个位置的配置文件不会被自动纳入builder.Configuration的配置源。

两种解决方法

方法一:调整配置文件位置

直接将wwwroot里的appsettings.json移动到项目根目录(和Program.cs同一层级),不需要修改任何代码,builder.Configuration就能自动读取到BaseApiUrl的值。

方法二:手动加载wwwroot中的配置文件

如果必须保留appsettings.json在wwwroot目录下,需要通过HTTP请求手动加载配置并添加到配置集合中,修改Program.cs代码如下:

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

// 先创建临时HttpClient用于加载wwwroot中的配置文件
var tempHttpClient = new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) };
builder.Services.AddScoped(sp => tempHttpClient);

// 加载wwwroot下的appsettings.json
var configResponse = await tempHttpClient.GetAsync("appsettings.json");
configResponse.EnsureSuccessStatusCode(); // 确保请求成功
using var configStream = await configResponse.Content.ReadAsStreamAsync();
builder.Configuration.AddJsonStream(configStream);

// 现在可以正常读取配置并注册HttpClient
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.Configuration.GetValue<string>("BaseApiUrl")!) });

await builder.Build().RunAsync();

注意:这里需要将Program.cs改为异步执行(Blazor WASM支持异步顶层语句),确保配置加载完成后再注册依赖服务。

内容的提问来源于stack exchange,提问作者Christoff Colomb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:32:25