zoukankan      html  css  js  c++  java
  • ASP.NET Core 中的配置

    ASP.NET Core 中的配置是使用一个或多个配置提供程序执行的。 配置提供程序使用各种配置源从键值对读取配置数据:

    • 设置文件,例如 appsettings.json
    • 环境变量
    • 命令行参数
    • 内存中的 .NET 对象

    内存中的.NET对象

    MemoryConfigurationProvider 使用内存中集合作为配置键值对。

    以下代码将内存集合添加到配置系统中:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var Dict = new Dictionary<string, string>
            {
               {"MyKey", "Dictionary MyKey Value"},
               {"Position:Title", "Dictionary_Title"},
               {"Position:Name", "Dictionary_Name" },
               {"Logging:LogLevel:Default", "Warning"}
            };
    
            return Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddInMemoryCollection(Dict);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
        }
    }

    以下示例代码显示了上述配置设置:

    public class TestModel : PageModel
    {
        // requires using Microsoft.Extensions.Configuration;
        private readonly IConfiguration Configuration;
    
        public TestModel(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public ContentResult OnGet()
        {
            var myKeyValue = Configuration["MyKey"];
            var title = Configuration["Position:Title"];
            var name = Configuration["Position:Name"];
            var defaultLogLevel = Configuration["Logging:LogLevel:Default"];
    
    
            return Content($"MyKey value: {myKeyValue} 
    " +
                           $"Title: {title} 
    " +
                           $"Name: {name} 
    " +
                           $"Default Log Level: {defaultLogLevel}");
        }
    }

    命令行配置提供程序

    组件包:Microsoft.Extensions.Configuration.CommandLine

    支持的命令格式:

    • 无前缀的key=value模式
    • 双中横线模式 --key=value 或 --key value
    • 正斜杠模式 /key=value 或 /key value

    Tips:等号分隔符和空格分隔符不能混用

    命令替换模式(为命令取别名):

    • 必须以单划线 (-) 或双划线 (--)开头
    • 映射字典不能包含重复Key

    我们创建一个.Net Core Console项目,为项目添加组件包

    设置程序参数:

    class Program
    {
        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder();
    
            builder.AddCommandLine(args);
    
            var configurationRoot = builder.Build();
    
            Console.WriteLine($"CommandLineKey1: {configurationRoot["Key1"]}");
            Console.WriteLine($"CommandLineKey2: {configurationRoot["Key2"]}");
            Console.WriteLine($"CommandLineKey3: {configurationRoot["Key3"]}");
            Console.ReadKey();
        }
    }

    输出结果:

    我们在试试用k1变量的值来替换Key1

     添加映射:

     查看输出:

    环境变量配置

    组件包:Microsoft.Extensions.Configuration.EnvironmentVariables

    使用场景:

    • 在 Docker 中运行时
    • 在 Kubernets 中运行时
    • 需要设置 ASP.NET Core 的一些内置特殊配置时

    由于容器的环境隔离能力,使得我们可以使用环境变量来配置我们的应用程序。

    特征:

    所有平台上的环境变量分层键都不支持 : 分隔符。

    __(双下划线):

    • 受所有平台支持。 例如,Bash 不支持 : 分隔符,但支持 __
    • 自动替换为 :

    在调试环境下注入:

     提取方法大同小异就不在赘述。

    前缀过滤:

    使用builder.AddEnvironmentVariables("Min_");方法则可过滤掉除了前缀为Min_的其他环境变量。


    文件配置提供程序

    FileConfigurationProvider 是从文件系统加载配置的基类。 以下配置提供程序派生自 FileConfigurationProvider

    JSON 配置提供程序

    JsonConfigurationProvider 从 JSON 文件键值对加载配置。

    重载可以指定:

    • 文件是否可选。
    • 如果文件更改,是否重载配置。
    C#
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    config.AddJsonFile("MyConfig.json", 
                        optional: true, 
                        reloadOnChange: true);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

    前面的代码:

    • 通过以下选项将 JSON 配置提供程序配置为加载 MyConfig.json 文件:
      • optional: true:文件是可选的。
      • reloadOnChange: true:保存更改后会重载文件。应用程序在读取Json的值在文件变化时,读取的值也会变化。
    Json
    {
    "Position": { "Title": "“我的配置”标题", "Name": "My Config Smith" }, "MyKey": "MyConfig.json Value", "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*" }
    public class TestModel : PageModel
    {
        // requires using Microsoft.Extensions.Configuration;
        private readonly IConfiguration Configuration;
    
        public TestModel(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public ContentResult OnGet()
        {
            var myKeyValue = Configuration["MyKey"];
            var title = Configuration["Position:Title"];
            var name = Configuration["Position:Name"];
            var defaultLogLevel = Configuration["Logging:LogLevel:Default"];
    
    
            return Content($"MyKey value: {myKeyValue} 
    " +
                           $"Title: {title} 
    " +
                           $"Name: {name} 
    " +
                           $"Default Log Level: {defaultLogLevel}");
        }
    }
  • 相关阅读:
    TYVJ P1092 麻将
    BZOJ 1020——[SHOI2008]安全的航线flight
    JSOI2008 火星人prefix
    Silverlight下“DataGrid”和“Pdf”导出
    Jquery实现“Iframe”页面切换
    遍历表,执行存储过程的方法
    “JS”和“Aspx”之注册“JS脚本”、刷新页面、TreeNode下JS连接设置
    WeatherWebService
    WCF方法“异步调用”的“同步问题”
    “Silverlight”中获取“HTML元素和参数”及JS交互
  • 原文地址:https://www.cnblogs.com/Xieyiincuit/p/13976984.html
Copyright © 2011-2022 走看看