在Blazor应用开发中,我们常常需要读取一些可动态调整的配置信息,比如接口地址、功能开关等,IConfiguration是.NET中提供的配置读取接口,能够方便地帮我们获取配置文件中的内容。

准备配置文件
首先需要在项目根目录创建或者修改appsettings.json配置文件,添加我们需要的配置项,示例如下:
{
"ApiConfig": {
"BaseUrl": "https://ipipp.com/api",
"Timeout": 30
},
"FeatureSwitch": {
"EnableNewModule": true
}
}
注入IConfiguration服务
Blazor框架默认已经将IConfiguration服务注册到依赖注入容器中,我们不需要额外手动注册,只需要在使用的组件中通过注入的方式获取即可。
在Razor组件中注入
在.razor文件的顶部添加注入指令,就可以直接使用IConfiguration实例:
@inject IConfiguration Configuration <h3>配置读取示例</h3>
在普通类中注入
如果需要在普通的服务类中读取配置,可以通过构造函数的依赖注入获取IConfiguration:
public class ApiService
{
private readonly IConfiguration _configuration;
// 构造函数注入IConfiguration
public ApiService(IConfiguration configuration)
{
_configuration = configuration;
}
public string GetBaseUrl()
{
// 读取配置
return _configuration["ApiConfig:BaseUrl"];
}
}
读取配置的具体方式
直接读取简单配置
对于层级不深的配置项,可以直接通过冒号拼接键名的方式读取:
@inject IConfiguration Configuration <p>接口基础地址:@Configuration["ApiConfig:BaseUrl"]</p> <p>请求超时时间:@Configuration["ApiConfig:Timeout"]</p> <p>新模块开关状态:@Configuration["FeatureSwitch:EnableNewModule"]</p>
绑定到强类型对象
如果配置项比较多,直接读取的方式不够直观,我们可以将配置绑定到对应的强类型对象上,首先需要定义匹配配置结构的类:
public class ApiConfig
{
public string BaseUrl { get; set; }
public int Timeout { get; set; }
}
public class FeatureSwitch
{
public bool EnableNewModule { get; set; }
}
然后在Program.cs中配置绑定,Blazor Server和Blazor WebAssembly的配置方式略有不同:
Blazor Server项目
var builder = WebApplication.CreateBuilder(args);
// 绑定配置到强类型对象
builder.Services.Configure<ApiConfig>(builder.Configuration.GetSection("ApiConfig"));
builder.Services.Configure<FeatureSwitch>(builder.Configuration.GetSection("FeatureSwitch"));
var app = builder.Build();
// 其他中间件配置
app.Run();
Blazor WebAssembly项目
var builder = WebAssemblyHostBuilder.CreateDefault(args);
// 绑定配置到强类型对象
builder.Services.Configure<ApiConfig>(builder.Configuration.GetSection("ApiConfig"));
builder.Services.Configure<FeatureSwitch>(builder.Configuration.GetSection("FeatureSwitch"));
await builder.Build().RunAsync();
绑定完成后,在组件中注入对应的配置对象即可使用:
@using Microsoft.Extensions.Options @inject IOptions<ApiConfig> ApiConfigOptions @inject IOptions<FeatureSwitch> FeatureSwitchOptions <p>接口基础地址:@ApiConfigOptions.Value.BaseUrl</p> <p>请求超时时间:@ApiConfigOptions.Value.Timeout 秒</p> <p>新模块是否开启:@FeatureSwitchOptions.Value.EnableNewModule</p>
注意事项
- Blazor WebAssembly项目的
appsettings.json需要设置为嵌入资源或者复制到输出目录,否则无法读取到配置内容。 - 读取配置时如果键名不存在,返回值为null,建议先做空值判断再使用,避免出现空引用异常。
- 如果配置需要支持动态更新,可以使用
IOptionsSnapshot<T>或者IOptionsMonitor<T>代替IOptions<T>,前者在每次请求时重新读取配置,后者可以监听配置变化并触发回调。
常见问题解答
问:为什么我读取到的配置是null?
答:首先检查appsettings.json的键名是否和读取时的键名完全一致,包括大小写和层级分隔符,其次检查配置文件是否被正确加载到项目中。
问:Blazor WebAssembly可以读取本地配置文件吗?
答:可以,但是需要注意浏览器的安全限制,配置文件需要放在项目的wwwroot目录下,并且通过HTTP请求获取,默认的项目模板已经帮我们处理了这个逻辑。
BlazorIConfigurationappsettings_json依赖注入配置读取修改时间:2026-07-15 20:39:27