前言

.net core来势已不可阻挡。既然挡不了,那我们就顺应它。了解它并学习它。今天我们就来看看和之前.net版本的配置文件读取方式有何异同,这里不在赘述.NET Core 基础知识。

ps:更新版,更新了多种方式实现读取配置文件信息,各位看官结合自己实际情况选择合适的读取方式即可

实现方式一

我们先来看下初始的Json文件是怎样的:

  1. {
  2. "Logging": {
  3. "IncludeScopes": false,
  4. "LogLevel": {
  5. "Default": "Warning"
  6. }
  7. },
  8. "Test": {
  9. "One": ,
  10. "Two": "",
  11. "Three": "",
  12. "Content": {
  13. "cone": ,
  14. "ctwo": "潇十一郎"
  15. }
  16. }
  17. }

读取Json配置文件信息,我们需要安装Microsoft.Extensions.Configuration.Json 包,如下:

然后再 调用AddJsonFile把Json配置的Provider添加到ConfigurationBuilder中,实现如下:

我们将Configuration 属性改成

public static IConfiguration Configuration { get; set; }

然后再ConfigureServices 中将Json配置的Provider添加到ConfigurationBuilder中

  1. var builder = new ConfigurationBuilder()
  2. .SetBasePath(Directory.GetCurrentDirectory())
  3. .AddJsonFile("appsettings.json");
  4. Configuration = builder.Build();
  5. services.AddSingleton<IConfiguration>(Configuration);//配置IConfiguration的依赖

然后配置完,我们就可以读取了,当然,如果是在其他地方调用,就需要通过构造函数注入IConfiguration

读取方式一:使用key读取,如下:

  1. private readonly IConfiguration _configuration;
  2. //构造注入
  3. public HomeController(IConfiguration configuration)
  4. {
  5. _configuration = configuration;
  6. }
  7.  
  8. public IActionResult Index()
  9. {
  10. //方式一 通过 Key值获取
  11. var one = _configuration["Test:One"]; //
  12. var conw = _configuration["Test:Content:ctwo"]; //潇十一郎
  13. }

读取方式二:使用GetValue<T>,需要安装Microsoft.Extensions.Configuration.Binder包,读取如下:

  1. private readonly IConfiguration _configuration;
  2. //构造注入
  3. public HomeController(IConfiguration configuration)
  4. {
  5. _configuration = configuration;
  6. }
  7.  
  8. public IActionResult Index()
  9. {
  10.  
  11. //方式二 通过GetValue<T>(string key)方式获取 第一个是直接获取key 第二个若查找不到则指定默认值
  12. var two = _configuration.GetValue<int>("Test:One"); //
  13. var three = _configuration.GetValue<string>("Test:Three"); //
  14. var ctwo = _configuration.GetValue<string>("Test:Content:ctwo"); //潇十一郎
  15.  
  16. var four = _configuration.GetValue<string>("Test:four", "我是默认值"); //我是默认值
  17.  
  18. }

特别说明一下:GetValue的泛型形式有两个重载,一个是GetValue("key"),另一个是可以指定默认值的GetValue("key",defaultValue).如果key的配置不存在,第一种结果为default(T),第二种结果为指定的默认值.

上述两个读取方式调试图如下:

实现方式二

注:需要NuGet引入:Microsoft.Extensions.Options.ConfigurationExtensions

①我们再配置文件appsettings.json中 新增自定义API Json如下:

  1. {
  2. "Logging": {
  3. "IncludeScopes": false,
  4. "LogLevel": {
  5. "Default": "Warning"
  6. }
  7. },
  8. "API": {
  9. "Url": "http://localhost:8080/",
  10. "getclub": "api/club"
  11. }
  12. }

②然后我们定义一个静态类,再类中申明一个IConfigurationSection 类型变量

  1. private static IConfigurationSection _appSection = null;

③写一个AppSetting静态方法获取到配置的Value项,代码如下:

  1. public static string AppSetting(string key)
  2. {
  3. string str = string.Empty;
  4. if (_appSection.GetSection(key) != null)
  5. {
  6. str = _appSection.GetSection(key).Value;
  7. }
  8. return str;
  9. }

④需要设置IConfigurationSection初始值,如下:

  1. public static void SetAppSetting(IConfigurationSection section)
  2. {
  3. _appSection = section;
  4. }

⑤然后写一个根据不同Json项读取出对应的值即可:

  1. public static string GetSite(string apiName)
  2. {
  3. return AppSetting(apiName);
  4. }

⑥有了以上几个步骤,基本上读取代码已经全部写完,剩下最后一个最重要的步骤,将要读取的Json文件配置到Startup.cs的Configure方法中,如下:

这样,我们就可以很轻松的获取到我们想要的配置项了,整段CS代码如下:

  1. /// <summary>
  2. /// 配置信息读取模型
  3. /// </summary>
  4. public static class SiteConfig
  5. {
  6. private static IConfigurationSection _appSection = null;
  7.  
  8. /// <summary>
  9. /// API域名地址
  10. /// </summary>
  11. public static string AppSetting(string key)
  12. {
  13. string str = string.Empty;
  14. if (_appSection.GetSection(key) != null)
  15. {
  16. str = _appSection.GetSection(key).Value;
  17. }
  18. return str;
  19. }
  20.  
  21. public static void SetAppSetting(IConfigurationSection section)
  22. {
  23. _appSection = section;
  24. }
  25.  
  26. public static string GetSite(string apiName)
  27. {
  28. return AppSetting(apiName);
  29. }
  30. }

最后 ,我们来跑一下演示效果如下:

补充

事务总是不断发展,有更优的做法,那就一定要摒弃以前不太美的实现,现在补充一种实现获取配置文件的方法,更为优雅美观:

NuGet引入:Microsoft.Extensions.Configuration 包

在appsetting中加入短信相关配置信息:

在Startup.cs中重写:

  1. public Startup(IConfiguration configuration)
  2. {
  3. Configuration = configuration;
  4. }
  5.  
  6. public IConfiguration Configuration { get; }

新建一个静态类:ConfigurationKeys

  1. public class ConfigurationKeys
  2. {
  3. public static string SMS_APP_URL = "sms:url";
  4.  
  5. public static string SMS_APP_ID = "sms:appid";
  6.  
  7. public static string SMS_APP_SECRET = "sms:secret";
  8.  
  9. public static string SMS_VERIFY_CODE_TEMPLATE = "sms:verifycodetemplate";
  10. }

使用

在具体的控制器或者类中注入:

  1. private readonly IConfiguration _config;
  2. public SmsServices(IConfiguration config)
  3. {
  4. _config = config;
  5. }
  1. var templateId = _config[ConfigurationKeys.SMS_VERIFY_CODE_TEMPLATE];

完!

.NET Core2.1获取自定义配置文件信息的更多相关文章

  1. .NET Core 获取自定义配置文件信息

    前言 .net core来势已不可阻挡.既然挡不了,那我们就顺应它.了解它并学习它.今天我们就来看看和之前.net版本的配置文件读取方式有何异同,这里不在赘述.NET Core 基础知识. ps:更新 ...

  2. Java 获取到配置文件信息

    Java程序将数据库或者服务器IP写入到代码中,难免缺少灵活性. 如果写入到配置文件,部署到不通服务器上,只需要修改配置文 件即可. Java怎么读取配置文件 /** * 获取到配置文件信息 * @p ...

  3. js ajax设置和获取自定义header信息的方法总结

    目录 1.js ajax 设置自定义header 1.1 方法一: 1.2 方法二: 2.js ajax 获取请求返回的response的header信息 3.js ajax 跨域请求的情况下获取自定 ...

  4. Spring Boot 获取yaml配置文件信息

    Spring boot 项目启动过程中: org.springframework.boot.SpringApplication#prepareEnvironment 当程序步入listeners.en ...

  5. Java获取properties配置文件信息

    调用方法:String url = PropertiesUtil.getProperty("url"); public class PropertiesUtil { public ...

  6. C# 自定义配置文件

    配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置:第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径. 第一种:除了在常用的appSettings ...

  7. .net c#获取自定义Attribute

    前言: 在c#开发中,有时候我们需要读取 Attribute中的信息(关于Attribute , 我自己把他理解成一个可以为类,属性标记的东西,这个标记可以为你提供一些关于类,方法,属性的额外信息) ...

  8. ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,

    一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...

  9. SpringBoot配置分析、获取到SpringBoot配置文件信息以及几种获取配置文件信息的方式

    Spring入门篇:https://www.cnblogs.com/biehongli/p/10170241.html SpringBoot的默认的配置文件application.properties ...

随机推荐

  1. python3 通过邮件发送测试报告

    通过之前的学习,了解到了如何利用excel进行读取数据,如何采用DDT数据驱动,如何使用unittest.下面是将之前所学进行结合,并发送邮件-->leader,废话不多说,上代码: email ...

  2. vscode设置中文语言

    https://jingyan.baidu.com/article/7e44095377c9d12fc1e2ef5b.html

  3. 微信获取ticket及生成二维码(临时或永久)

    微信获取ticket及生成二维码(临时或永久) curl.php---- define("APPID",""); define("APPSECRET& ...

  4. wpa_cli 关联无线网络

    fq关联无线网络,不同的无线网络认证方式不同设置:    1)open(开放式认证方式,分为):         wpa_cli -iwlan0 set_network 0 ssid '"w ...

  5. SPA 单页面应用程序。

    看到这个问题,先说下自己的理解到的程度,再去参考做修正,争取这一次弄懂搞清楚 自己的理解: 单页面应用程序,解决浏览器获取数据刷新页面的尴尬,通过ajax请求获取数据达到异步更新视图的按钮,原理的实现 ...

  6. FliterLog代码分析

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  7. nodejs内存溢出

    npm-v 报错,错误信息如下: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScri ...

  8. Springboot入门之分布式事务管理

    springboot默认集成事务,只主要在方法上加上@Transactional即可. 分布式事务一种情况是针对多数据源,解决方案这里使用springboot+jta+atomikos来解决 一.po ...

  9. getMemory的经典例子

    //NO.1:程序首先申请一个char类型的指针str,并把str指向NULL(即str里存的是NULL的地址,*str为NULL中的值为0),调用函数的过程中做了如下动作:1申请一个char类型的指 ...

  10. mysql5.7忽略大小写问题

    mysql5.7忽略大小写问题 1.1 前言 新安装mysql5.7版本后,linux环境下默认是大小写敏感的. 1.2 忽略大小写敏感步骤 进入mysql配置文件:         vi   /et ...