如何在 ASP.NET Core 中向“IConfiguration”添加新的键/值

use*_*687 9 c# asp.net-core

“Configuration”对象成功加载所有 appsettings.json 内容(在 Program.cs 中使用“CreateDefaultBuilder”)。相同的“Configuration”对象也可以在“Startup.cs”中访问(因为它是由框架本身注入的)。

现在,在“Startup.ConfigureServices”中,我想向“Configuration”对象添加更多条目,并在“Startup.Configure”和其他类(如控制器等)中访问它

简而言之,我想要如下的东西:

Configuration.add("MyNewKey", "MyNewValue"); //HOW TO DO THIS
Run Code Online (Sandbox Code Playgroud)

目前,我不想使用任何结构化类型。

这有可能吗?

Zhi*_* Lv 19

这有可能吗?

有可能的。我们可以在 Startup.ConfigureServices 方法中设置一个配置值,并在“Startup.Configure”和其他类(如控制器等)中访问它。您可以检查以下示例代码(Asp.net core 3.1 MVC 应用程序):

启动.cs:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    // using get and set accessor 
    public IConfiguration Configuration { get; set; }

    public void ConfigureServices(IServiceCollection services)
    {
        Configuration["MyNewKey"] = "AAA";  //set the configuration value.
        services.AddControllersWithViews();
        services.AddRazorPages();
    } 
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseDatabaseErrorPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }
        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();
        app.UseAuthorization();

        var result = Configuration["MyNewKey"]; //access the configuration value.

        app.UseEndpoints(endpoints =>
        { 
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            endpoints.MapRazorPages();
            
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

HomeController.cs:

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;
    private readonly IConfiguration _configuration;

    public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    public IActionResult Index()
    {
        var value = _configuration["MyNewKey"];
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

调试截图如下:

在此输入图像描述

  • 我喜欢你解释/呈现的方式。简单、直观、直接。太感谢了! (3认同)