ASP.NET Core配置文件的獲取和設置
在ASP.NET Core 中,應用程序配置數(shù)據可以使用JSON, XML 和 INI格式 和內置環(huán)境變量,命令行參數(shù)或內存中的集合。
1.如何獲取和設置配置
ASP.NET Core配置系統(tǒng)針對以前的依賴于System.Configuration和XML配置文件(如Web.config)的ASP,NET 版本進行了重構。新的配置模型提供了精簡高效的,能夠通過檢索多樣化提供程序來獲取基于鍵/值對配置的能力。應用程序和框架可以通過新的選擇模式訪問配置。
可以在ASP.NET Core應用程序中的Startup類中只實例化一個Configuration示例,然后選擇模式來訪問各自的設置。
Configuration類是一個提供讀寫鍵/值對能力的Providers集合。如果一個鍵值對寫入Configuration,它不會持久,當源再次讀寫值時將會丟失。因此至少需要配置一個數(shù)據源,使得configuration能正常工作。
下面通過內存配置演示Configuration處理鍵值對:

內存配置一般用在一次請求中需要暫存數(shù)據的情況,例如,如果管道中有多個中間件,可以在某一個中間件中暫存數(shù)據,后面的某一個中使用。
在開發(fā)中一般會把配置值放在一個有層次的數(shù)據結構中,例如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擴展方法加參數(shù)"DefaultConnection"來獲取。

應用程序所需要的設置和指定配置的機制都可以通過使用選擇模式解耦。創(chuàng)建自己的配置類時,可以是幾個不同的類,分別對應不同的配置組,然后通過選項服務注入到應用程序中。這樣就可以通過配置或其他所選擇的機制來設置了。
2.使用內置數(shù)據源
開發(fā)時并不局限于必須使用單個配置提供程序,可以把多個配置提供程序組合在一起。
擴展方法支持為配置添加額外的配置文件提供程序。這些方法能被獨立的或鏈式調用在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();
}指定配置提供程序的順序很重要,這將影響他們的設置被應用的優(yōu)先級:
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);
//配置環(huán)境變量
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfiguration Configuration { get; }IHostingEnvironment 服務用于獲取當前環(huán)境。在Development環(huán)境中,AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true)將會查找appsettings.Development.json配置文件,并覆蓋appsettings.json中存在的值。同樣環(huán)境變量也會覆蓋它們兩個的值。
一旦將指定文件作為配置源,就可以選擇當文件發(fā)生變化后,是否重新再付這部分的配置,reloadOnChange:true。
3.使用選項和配置對象
選擇模式可使用自定義的配置類表示一組相關設置。這個配置類需要為配置項提供公開的 屬性和一個無參的構造函數(shù)??梢愿鶕贸绦虻墓δ芊纸鉃槎鄠€配置對象。
下面自定義appsettings.json的配置類,并使用:
先創(chuàng)建配置類
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);
//配置環(huán)境變量
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>服務來獲取配置。若想從其他途徑(從數(shù)據庫通過EF獲?。┇@取配置,可以使用ConfigureOptions<TOptions>擴展方法直接指定經過定制的IConfigureOptions<TOptions>服務。
其他方法:
//通過代碼編寫
services.Configure<AppSettingOptions>(options=>
{
options.AllowedHosts = "test";
});
//只配置部分
services.Configure<AppSettingOptions>(Configuration.GetSection("ConnectionStrings"));到此這篇關于ASP.NET Core配置文件的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
ASP.NET MVC DropDownList數(shù)據綁定及使用詳解
DropDownList 控件用于創(chuàng)建下拉列表。DropDownList 控件中的每個可選項都是由 ListItem 元素定義的!該控件支持數(shù)據綁定2012-12-12
分享Visual Studio原生開發(fā)的10個調試技巧(2)
這篇文章又為大家分享了Visual Studio原生開發(fā)的10個調試技巧,感興趣的朋友可以參考一下2015-11-11
asp.net 實現(xiàn)動態(tài)顯示當前時間(不用javascript不考慮開銷)
asp.net實現(xiàn)動態(tài)顯示時間,無需用到javascrip,而是用了AJAX。2009-11-11
.NET讀寫Excel工具Spire.Xls使用 Excel文件的控制(2)
這篇文章主要為大家詳細介紹了.NET讀寫Excel工具Spire.Xls使用,Excel文件的控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
asp.net下String.prototype.split()的兼容問題
IE下的String.prototype.split()函數(shù)bug2012-12-12

