文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

ASP.NETCore配置文件的获取和设置

2024-04-02 19:55

关注

在ASP.NET Core 中,应用程序配置数据可以使用JSON, XML 和 INI格式 和内置环境变量,命令行参数或内存中的集合。

1.如何获取和设置配置

ASP.NET Core配置系统针对以前的依赖于System.Configuration和XML配置文件(如Web.config)的ASP,NET 版本进行了重构。新的配置模型提供了精简高效的,能够通过检索多样化提供程序来获取基于键/值对配置的能力。应用程序和框架可以通过新的选择模式访问配置。

可以在ASP.NET Core应用程序中的Startup类中只实例化一个Configuration示例,然后选择模式来访问各自的设置。

Configuration类是一个提供读写键/值对能力的Providers集合。如果一个键值对写入Configuration,它不会持久,当源再次读写值时将会丢失。因此至少需要配置一个数据源,使得configuration能正常工作。

下面通过内存配置演示Configuration处理键值对:

内存配置一般用在一次请求中需要暂存数据的情况,例如,如果管道中有多个中间件,可以在某一个中间件中暂存数据,后面的某一个中使用。

在开发中一般会把配置值放在一个有层次的数据结构中,例如appsettings.json,在这种情况下,可以使用以: 符号分割(从层次结构的根开始)的键读取值:

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=.;Initial Catalog=AccessManagement;Integrated Security=True"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "AllowedHosts": "*",
  "MyOptions": {
    "Option1": "ww",
    "Option2": 3
  }
}

在应用程序中通过Configuration获取配置的连接字符串,可以通过ConnectionStrings:DefaultConnection读取ConnectionStrings的设置,也可以通过GetConnectionString扩展方法加参数"DefaultConnection"来获取。

应用程序所需要的设置和指定配置的机制都可以通过使用选择模式解耦。创建自己的配置类时,可以是几个不同的类,分别对应不同的配置组,然后通过选项服务注入到应用程序中。这样就可以通过配置或其他所选择的机制来设置了。

2.使用内置数据源

开发时并不局限于必须使用单个配置提供程序,可以把多个配置提供程序组合在一起。

扩展方法支持为配置添加额外的配置文件提供程序。这些方法能被独立的或链式调用在ConfigurationBuilder实例之上:

public Startup()
        {
            var builder = new ConfigurationBuilder();
            builder.SetBasePath(Directory.GetCurrentDirectory());
            builder.AddJsonFile("appsettings.json");
            var config = builder.Build();

            var _config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();
        }

指定配置提供程序的顺序很重要,这将影响他们的设置被应用的优先级:

        public Startup(IConfiguration configuration,IHostingEnvironment env)
        {

            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(“appsettings.json",optional:true,reloadOnChange:true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true);

            //配置环境变量
            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; }

IHostingEnvironment 服务用于获取当前环境。在Development环境中,AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true)将会查找appsettings.Development.json配置文件,并覆盖appsettings.json中存在的值。同样环境变量也会覆盖它们两个的值。

一旦将指定文件作为配置源,就可以选择当文件发生变化后,是否重新再付这部分的配置,reloadOnChange:true。

3.使用选项和配置对象

选择模式可使用自定义的配置类表示一组相关设置。这个配置类需要为配置项提供公开的 属性和一个无参的构造函数。可以根据应用程序的功能分解为多个配置对象。

下面自定义appsettings.json的配置类,并使用:

先创建配置类

namespace MVCTest
{
    public class AppSettingOptions
    {
        public DefaultConnec ConnectionStrings { get; set; }
        public string AllowedHosts { get; set; }
    }

    public class DefaultConnec
    {
        public string DefaultConnection { get; set; }
    }
}

在ConfigureServices中调用选项服务:

public Startup(IConfiguration configuration,IHostingEnvironment env)
        {
            //Configuration = configuration;
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json",optional:true,reloadOnChange:true)
                //.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true);

            //配置环境变量
            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();//提供依赖注入
            services.Configure<AppSettingOptions>(Configuration); //绑定配置选项     
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

在HomeController中使用:

    public class HomeController : Controller
    {
        private readonly IOptions<AppSettingOptions> _options;
        public HomeController(IOptions<AppSettingOptions> options,)
        {
            _options = options;
        }
        public static Logger nlog = LogManager.GetCurrentClassLogger();
        public IActionResult Index()
        {
            var AllowedHosts = _options.Value.AllowedHosts;
            var DefaultConnection = _options.Value.ConnectionStrings.DefaultConnection;
        }
     }

结果:

当通过绑定选项来配置选项类型的每一个属性时,实际上是绑定到每一个配置键。配置键是大小写不敏感的。

当通过调用services.Configure<AppSettingOptions>(Configuration);代码,将一个IConfigureOptions<AppSettingOptions>服务加入服务容器,是为了后面应用程序或框架能通过IOptions<AppSettingOptions>服务来获取配置。若想从其他途径(从数据库通过EF获取)获取配置,可以使用ConfigureOptions<TOptions>扩展方法直接指定经过定制的IConfigureOptions<TOptions>服务。

其他方法:

    //通过代码编写
    services.Configure<AppSettingOptions>(options=>
    {
        options.AllowedHosts = "test";
    });
    //只配置部分
    services.Configure<AppSettingOptions>(Configuration.GetSection("ConnectionStrings"));

到此这篇关于ASP.NET Core配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯