聊聊ASP.NET Core 中的配置

开发 前端
ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序。

 [[382124]]

本文转载自微信公众本文转载自微信公众号「UP技术控」,作者conan5566 。转载本文请联系UP技术控公众号。

背景

ASP.NET Core 提供了一个灵活可扩展,基于键值的配置系统. 但是配置系统独立于ASP.NET Core是Microsoft.Extensions 类库的部分. 它可以用于任何类型的应用程序。

1、以键-值对的形式读取配置


    "Position": { 
        "Title""编辑器"
        "Name""Joe Smith" 
    }, 
    "MyKey""My appsettings.json Value"
    "Logging": { 
        "LogLevel": { 
            "Default""Information"
            "Microsoft""Warning"
            "Microsoft.Hosting.Lifetime""Information" 
        } 
    }, 
    "AllowedHosts""*" 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

在ConfigureServices方法里面添加如下测试代码:

var myKeyValue = Configuration["MyKey"]; 
        var title = Configuration["Position:Title"]; 
        var name = Configuration["Position:Name"]; 
        var defaultLogLevel = Configuration["Logging:LogLevel:Default"]; 
  • 1.
  • 2.
  • 3.
  • 4.

2、多环境配置

使用默认配置,EnvironmentVariablesConfigurationProvider 会在读取 appsettings.json、appsettings.Environment.json 和机密管理器后从环境变量键值对加载配置 。 因此,从环境中读取的键值会替代从 appsettings.json、appsettings.Environment.json 和机密管理器中读取的值 。在 launchSettings.json 中设置的环境变量,在 launchSettings.json 中设置的环境变量将替代在系统环境中设置的变量。

3、读取结构化的配置数据

添加一个类 TestSubSectionConfig 对应于配置文件中的 subsection 节点

public class TestSubSectionConfig 
    { 
        public string SubOption1 { get; set; } 
        public string SubOption2 { get; set; } 
    } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

在ConfigureServices方法里面添加如下测试代码:

//使用GetSection解析配置文件的节 
var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>(); 
var suboption2 = subsectionOptions.SubOption2; 
 
Console.WriteLine($"subsection:suboption2: {suboption2}"); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

如果需要在Controller里面使用,可以通过依赖注入的方式:

在ConfigureServices里面注册配置项。

public void ConfigureServices(IServiceCollection services) 

    //注册配置到服务容器 
    services.Configure<TestSubSectionConfig>(Configuration.GetSection("subsection")); 
 
    //var subsectionOptions = Configuration.GetSection("subsection").Get<TestSubSectionConfig>(); 
    //services.Configure<TestSubSectionConfig>(options => 
    //{ 
    //    options.SubOption1 = subsectionOptions["suboption1"]; 
    //    options.SubOption2 = subsectionOptions["suboption2"]; 
    // }); 
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
public class HomeController : Controller 

    private TestSubSectionConfig _subSectionConfig; 
    private ILogger<HomeController> _logger;  
 
    public HomeController(IOptions<TestSubSectionConfig> option, ILogger<HomeController> logger) 
    { 
        _subSectionConfig = option.Value; 
        _logger = logger; 
    } 
 
    public IActionResult Index() 
    { 
        _logger.LogInformation($"SubOption1: {_subSectionConfig.SubOption1}"); 
        _logger.LogInformation($"SubOption2: {_subSectionConfig.SubOption2}"); 
        return View(); 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

 

责任编辑:武晓燕 来源: UP技术控
相关推荐

2018-08-20 08:03:46

跨平台 Web操作系统

2024-06-11 09:00:00

异步编程代码

2024-09-09 07:37:51

AspJWT权限

2024-12-05 08:14:41

2024-10-21 07:15:08

2025-01-15 00:01:00

开发应用界面

2021-03-04 11:10:29

容器化Docker虚拟机

2009-07-20 17:27:01

配置ASP.NET

2009-07-21 10:05:10

ASP.NET配置文件

2021-03-12 00:04:52

网关Api

2024-09-10 08:13:16

Asp项目轻量级

2021-01-11 05:20:05

Controller代码数据层

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2021-01-15 05:38:28

ASPHttp端口

2021-01-13 07:33:41

API数据安全

2024-09-11 08:56:50

ASP多身份校验

2024-07-01 00:00:06

ASP.NET开源

2019-08-12 08:00:00

ASP.NetASP.Net Cor编程语言

2024-05-20 13:06:18

点赞
收藏

51CTO技术栈公众号