熟悉ASP.NET的開發者一定對web.config文件不陌生。在ASP.NET環境中,要想添加配置參數,一般也都會在此文件中操作。其中最常用的莫過于AppSettings與ConnectionStrings兩項。而要在代碼中獲得文件中的配置信息,ConfigurationManager則是必不可少需要引入的程序集。
然而到了ASP.NET Core時代,存儲與讀取配置的方式都發生了改變。
如果對ASP.NET Core項目有所了解的話,應該會看到過appsettings.json這個文件。這里就從JSON文件配置方式開始解釋ASP.NET Core中是如何讀取配置信息的。
假設有預先設置的appsettings.json文件:
{ "option1": "value1_from_json", "option2": 2, "subsection": { "suboption1": "subvalue1_from_json" }, "wizards": [ { "Name": "Gandalf", "Age": "1000" }, { "Name": "Harry", "Age": "17" } ]}在代碼中讀取可以按下面的方式操作:
public class Program{ public static IConfiguration Configuration { get; set; } public static void Main(string[] args = null) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); Configuration = builder.Build(); Console.WriteLine($"option1 = {Configuration["Option1"]}"); Console.WriteLine($"option2 = {Configuration["option2"]}"); Console.WriteLine( $"suboption1 = {Configuration["subsection:suboption1"]}"); Console.WriteLine(); Console.WriteLine("Wizards:"); Console.Write($"{Configuration["wizards:0:Name"]}, "); Console.WriteLine($"age {Configuration["wizards:0:Age"]}"); Console.Write($"{Configuration["wizards:1:Name"]}, "); Console.WriteLine($"age {Configuration["wizards:1:Age"]}"); Console.WriteLine(); Console.WriteLine("Press a key..."); Console.ReadKey(); }}首先,實例化一個ConfigurationBuilder對象,接著設置基礎路徑。
SetBasePath的操作其實是在ConfigurationBuilder的屬性字典里設置FileProvider的值。public static IConfigurationBuilder SetBasePath(this IConfigurationBuilder builder, string basePath){ ... return builder.SetFileProvider(new PhysicalFileProvider(basePath));}public static IConfigurationBuilder SetFileProvider(this IConfigurationBuilder builder, IFileProvider fileProvider){ ... builder.Properties[FileProviderKey] = fileProvider ?? throw new ArgumentNullException(nameof(fileProvider)); return builder;}然后是添加JSON文件。
public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, IFileProvider provider, string path, bool optional, bool reloadOnChange){ ... return builder.AddJsonFile(s => { s.FileProvider = provider; s.Path = path; s.Optional = optional; s.ReloadOnChange = reloadOnChange; s.ResolveFileProvider(); });}public static IConfigurationBuilder AddJsonFile(this IConfigurationBuilder builder, Action<JsonConfigurationSource> configureSource) => builder.Add(configureSource);
新聞熱點
疑難解答
圖片精選