1.配置文件的相關閑話
Core自身對於配置文件不是必須品,但由上文分析可知ASP.NET Core默認采用appsettings.json作為配置文件,關於配置信息的優先等級
命令行>環境變量>自我訂制的配置(AddUserSecrets)>和當前環境相匹配的appsettings.json中的配置>大於appsettings.json中的配置
關於AddUserSecrets是什么這里簡單一言以蔽之:每個開發人員有自己特性的配置數據,這些配置信息僅僅屬於個人,不能提交給團隊成員,
但是又不想不團隊共有的配置所影響. 剩下的自行去了解,關鍵是上面的優先級
和當前環境相匹配的appsettings.json如appsettings.Development.json
2.日志配置的問題
系統默認采用Microsoft.Extensions.Logging系列套餐作為默認的日志組件,且采用配置文件中的Logging節點作為日志的默認配置參數依據。如下圖所示:
日志的優先等級如下(從上到下依次遞增)
public enum LogLevel { // 含有最詳細的日志數據,其中可能含有程序的一些敏感數據,該選項默認是被禁用的,且生產環境中絕對不要開啟 // (太多,太敏感),之所以默認禁用在於appsettings.json中最低級別是Information Trace = 0, //調試用的一些數據 Debug = 1, // 用於跟蹤程序通常的流程數據,這些日志是一些長期的數據。 Information = 2, // 需要引起重視的日志數據,不會導致程序崩潰 Warning = 3, //發生了錯誤,但不會導致程序大范圍崩潰 Error = 4, // 嚴重且致命的錯誤 Critical = 5, // 不是用來記錄日志的. 通常用於設置默認值 None = 6 }
3.配置文件的讀取
1)ASP.NET Core的Host采用appsettings.json作為配置文件,具體的值是多少受優先級的影響(看第一段)
2)Startup類中Host自動通過構造注入的方式提供了Configuration的值,Configuration讀取方式介紹如下
ASP.NET Core中默認采用了Microsoft.Extensions.Configuration.Json作為配置解析器(publish一下就看到了里面有它)
{ "Id": "123", "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "UserList": [ { "Name": "Name1" }, { "Name": "Name2" }, { "Name": "Name3" } ] }
3.通過Key進行讀取
Configuration["Id"]; // 123 Configuration["Logging:IncludeScopes"]; // false Configuration["Logging:LogLevel:Default"]; // Debug Configuration["UserList:0:Name"]; // Name1
上面這些值都是string類型的,我們可以通過GetValue來獲取指定類型的值
如下
Configuration.GetValue<int>("Id"); // int類型的123 Configuration.GetValue<bool>("Logging:IncludeScopes"); // bool 類型 false Configuration.GetValue<string>("Logging:LogLevel:Default"); // string 類型 Debug Configuration.GetValue<string>("UserList:0:Name"); // string 類型 Name1
4.通過POCO(純C#對象)類來獲取配置信息(這里以Get方法為例)
public class Poco { public int Id { get; set; } public LoggingPoco Logging { get; set; } public List<User> UserList { get; set; } public class User { public string Name { get; set; } } } public class LoggingPoco { public bool IncludeScopes { get; set; } public LogLevelPoco LogLevel { get; set; } } public class LogLevelPoco { public string Default { get; set; } public string System { get; set; } public string Microsoft { get; set; } } var detailLogging = Configuration.GetSection("Logging").Get<LoggingPoco>();
獲取整個配置文件的配置信息
var allConfig = Configuration.Get<Poco>();
獲取指定節點下的配置內容
var logging = Configuration.GetSection("Logging").Get<LoggingPoco>();
說說優先級最高的配置(命令行方式)
前文所述,命令行具有優先級最高的配置權力,命令行傳入A的值的方式:
//core特有的傳入方式,沒有引號就會因空格截斷 dotnet app.dll /A="Value in CMD" //傳統的方式,沒有引號就會因空格截斷 dotnet app.dll --A "Value in CMD"
dotnet app.dll A="Value in CMD"
環境變量的傳值方式
環境變量的等級僅次於命令行,另外windows當前用戶的環境變量有限等級高於系統環境變量,windows環境變量可能重啟后才能生效;
主要的應用場景在於docker等
內存性配置方式
主要用於加密保護一些敏感配置數據.