如何在ASP.NET Core中读取配置值

作者 : IT 大叔 本文共3108个字,预计阅读时间需要8分钟 发布时间: 2020-09-8

与以前的版本ASP.NET Framework相比, ASP.NET Core带来了许多新功能。它具有新的项目文件,依赖项容器,缓存层以及其他功能。

配置也已更改。没有ConfigurationManager要读取的配置值。ASP.NET Core引入了json文件和配置对象。让我们看看如何使用“选项”模式来读取和覆盖ASP.NET Core的配置值。

选项模式

首先,在appsettings.json文件中添加要配置的值。与以前的ASP.NET版本不同,您可以使用部分和子部分来对值进行分组。并且,您可以使用布尔值,整数和数组,而不仅仅是字符串。

{
  "MySettings": {
    "ASetting": "Hello, world!",
    "ABooleanSetting": true,
    "AnIntegerSetting": 1,
    "AnArraySetting": ["hello", ",", "world", "!"]
  }
}

然后,创建一个类MySettings。此类名称与appsettings.json文件中您的部分匹配。另外,属性名称应与要在您的部分中配置的值匹配。

public class MySettings
{
    public string ASetting { get; set; }
    public bool ABooleanSetting { get; set; }
    public int AnIntegerSetting { get; set; }
    public string[] AnArraySetting { get; set; }
}

接下来,将定制部分绑定到设置文件和配置对象中。在类的ConfigureServices方法中Startup,使用Configure方法。像这样,

services.Configure<MySettings>(_configuration.GetSection("MySettings"));

注意该_configuration字段是如何注入到Startup类中的。

public class Startup
{
    private IConfiguration _configuration;

    public Startup(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<MySettings>(_configuration.GetSection("MySettings"));

        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // etc...
    }
}

如果您在设置文件中使用的小节,用它们分开:Configure方法。例如,如果 MySettings在section中AllMyCoolSettings,则可以使用

services.Configure<MySettings>(_configuration.GetSection("AllMyCoolSettings:MySettings"));

默认情况下,ASP.NET Core也会从环境变量中读取配置值。环境变量MySettings__ASetting将更改的值ASetting。这次,分隔符为双底线,__

要使用这些配置值,请IOptions<MySettings>在服务或控制器的构造函数中添加一个参数。

[Route("api/[controller]")]
public class ValuesController : Controller
{
    private readonly MySettings _mySettings;

    public ValuesController(IOptions<MySettings> mySettingsOptions)
    {
        _mySettings = mySettingsOptions.Value;
    }

    [HttpGet]
    public string Get(int id)
    {
        return _mySettings.ASetting;
    }
}

在测试中,您可以将方法Options.CreateMySettings类的实例一起使用来伪造配置值。

使用多种环境

您可以按环境分隔配置值。您可能具有用于开发,质量检查或任何其他环境的设置文件。如果在特定于环境的文件中找不到值,则ASP.NET Core将使用该appsettings.json文件。

您可以使用ASPNETCORE_ENVIRONMENT环境变量更改当前环境。在开发计算机上,可以使用launchSettings.json文件设置环境变量。

{
  // ...
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "<YourSolutionName>": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "MySettings__ASetting": "A settting changed from an environment var"
      }
    }
  }
}

后配置

想像一下,您开始从事旧项目。但是,您无法在任何设置文件中找到某些配置值。在询问同事之后,将从环境变量中读取那些配置值。当您获得这些环境变量的值进行测试时,它们已过时。啊!

您可以在launchSettings.json文件中添加这些环境变量。新的开发人员将不必再努力寻找这些价值。

但是,您可以重构代码以使用选项模式而不是环境变量。为了使事情变得显而易见,您可以在appsettings.json文件中添加正确的值。

现有的环境变量呢?如果您不能重命名现有的环境变量来跟随您的设置文件,请使用PostConfigure方法。您可以使用现有环境变量覆盖从设置文件读取的值。

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<MySettings>(_configuration.GetSection("MySettings"));

    // Other configurations and services...

    services.PostConfigure<MySettings>((options) =>
    {
        var aSettingEnvVar = Environment.GetEnvironmentVariable("A_Setting");
        if (!string.IsNullOrEmpty(aSettingEnvVar))
        {
            options.ASetting = aSettingEnvVar;
        }
    });

    services.AddControllers();
}

结论

瞧!现在,您知道如何使用ASP.NET Core读取配置值。请注意,还有其他选项接口。另外,您可以使用其他配置提供程序从ini文件,xml文件或Azure Key Vault读取值。

编码愉快!

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 如何在ASP.NET Core中读取配置值

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论