前言

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

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

实现方式一

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

 
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"Test": {
"One": 123,
"Two": "456",
"Three": "789",
"Content": {
"cone": 111,
"ctwo": "潇十一郎"
}
}
}
 

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

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

我们将Configuration 属性改成

public static IConfiguration Configuration { get; set; }

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

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

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

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

 
        private readonly IConfiguration _configuration;
//构造注入
public HomeController(IConfiguration configuration)
{
_configuration = configuration;
} public IActionResult Index()
{
//方式一 通过 Key值获取
var one = _configuration["Test:One"]; //123
var conw = _configuration["Test:Content:ctwo"]; //潇十一郎
}
 

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

 
        private readonly IConfiguration _configuration;
//构造注入
public HomeController(IConfiguration configuration)
{
_configuration = configuration;
} public IActionResult Index()
{ //方式二 通过GetValue<T>(string key)方式获取 第一个是直接获取key 第二个若查找不到则指定默认值
var two = _configuration.GetValue<int>("Test:One"); //123
var three = _configuration.GetValue<string>("Test:Three"); //789
var ctwo = _configuration.GetValue<string>("Test:Content:ctwo"); //潇十一郎 var four = _configuration.GetValue<string>("Test:four", "我是默认值"); //我是默认值 }
 

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

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

实现方式二

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

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

 
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"API": {
"Url": "http://localhost:8080/",
"getclub": "api/club"
}
}
 

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

private static IConfigurationSection _appSection = null;

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

 
       public static string AppSetting(string key)
{
string str = string.Empty;
if (_appSection.GetSection(key) != null)
{
str = _appSection.GetSection(key).Value;
}
return str;
}
 

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

       public static void SetAppSetting(IConfigurationSection section)
{
_appSection = section;
}

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

  public static string GetSite(string apiName)
{
return AppSetting(apiName);
}

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

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

 
    /// <summary>
/// 配置信息读取模型
/// </summary>
public static class SiteConfig
{
private static IConfigurationSection _appSection = null; /// <summary>
/// API域名地址
/// </summary>
public static string AppSetting(string key)
{
string str = string.Empty;
if (_appSection.GetSection(key) != null)
{
str = _appSection.GetSection(key).Value;
}
return str;
} public static void SetAppSetting(IConfigurationSection section)
{
_appSection = section;
} public static string GetSite(string apiName)
{
return AppSetting(apiName);
}
}
 

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

1|0 补充

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

NuGet引入:Microsoft.Extensions.Configuration 包

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

在Startup.cs中重写:

 
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; }
 

新建一个静态类:ConfigurationKeys

 
public class ConfigurationKeys
{
public static string SMS_APP_URL = "sms:url"; public static string SMS_APP_ID = "sms:appid"; public static string SMS_APP_SECRET = "sms:secret"; public static string SMS_VERIFY_CODE_TEMPLATE = "sms:verifycodetemplate";
}
 

1|1使用

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

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

完!

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

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

    前言 .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. .NET Core 获取操作系统各种信息

    .NET Core 获取操作系统各种信息 一.前言 .NET Core 内置了一些API供我们获取操作系统.运行时.框架等信息.这些API不是很常用,所有有些小伙伴可能还不知道,这里做一些可能用到的获 ...

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

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

  6. asp.net core获取自定义json的配置内容

    首先在主目录下建立:Iyibank.Web.json文件 里边的内容如下: { "ConnectionStrings": { "RedisCache": &qu ...

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

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

  8. C# 自定义配置文件

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

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

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

随机推荐

  1. eclipse使用SVN来检索项目

    file——import——搜索框输入SVN——点击SVN检索项目 ——输入想要检索的地址

  2. C# 与 Java 的一些差异

    如果你是 Java 开发人员,则可以在 Xamarin 平台上充分利用你的技能和现有代码,同时获得 C# 的代码重用优势.你会发现 C# 语法与 Java 语法非常相似,这两种语言提供非常类似的功能. ...

  3. Entity Framework 学习系列(5) - EF 相关查询

    目录 写在前面 一.使用Stopwatch 查询执行效率 二.简单查询 1.Linq写法: 2.Lambda表达式写法: 三.条件查询 1.Linq 写法 2.lambda 写法 四.聚合函数 1.L ...

  4. 类初始化应用(class初始化值用函数改变与增添)

    class Dataset(object): def __init__(self): self.image_info = [] # 初始化一个列表 def add_image(self, source ...

  5. 使用electron在mac升级签名后进行升级出现“QRLUpdaterErrorDomain”的错误

    现在在开发electron客户端,windows签名使用了签名狗的方式进行签名(小坑:签名狗只能对打包完的exe进行签名,而electron-builder需要在打包的时候将证书配置进去,所以需要导出 ...

  6. QML MouseArea学习小结

    QML中的MouseArea类型为用户进行简单的鼠标操作提供了方便. MouseArea是一个不可见的Item,通常与可见项目结合使用,以便为该项目提供鼠标处理.通过有效地充当代理,鼠标处理的逻辑可以 ...

  7. android studio学习----通过github的URL怎么导入新的工程

    这一切的前提是你装了git,有了github帐号,之后就很简单,但是导入之后交给android studio 也会发生各种编译错误,这个时候就需要自己去一一解决了,主要还是  引用依赖版本的问题 第一 ...

  8. android studio学习---签名打包的两种方式

    注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如果不知道签名是啥意思, ...

  9. GNU autotools 安装和使用

    1. 下载 http://www.gnu.org/software/software.html 2. 安装 m4-1.4.11.tar.gz autoconf-2.63.tar.gz automake ...

  10. windows设置多个JDK环境

    1.查看jdk版本 java -version 2.查看JAVA_HOME和PATH的变量值 echo %JAVA_HOME% set path 3.临时修改环境变量JAVA_HOME和PATH的变量 ...