[C#] ASP.NET Core 6.0 - 取得 appsettings.json 的資料兩種方法

2023-01-30

最近因為在改專案,ASP.net 6 中,已經消失了 Startup.cs ,一切操作都在  Program.cs 中

這邊記錄一下,兩種方法讀取 appsettings.json 的值,筆記一下,看這走向應該 .Net7 不會再改了吧

應該吧...



首先,我得先提供一下,我的  appsettings.json 的狀況

{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*", "UserData": { "Id": "Dooooooooooooooooooooonmmmma", "Name": "許當麻", "Age": 99, "Birth": "2023-01-30T19:01:55.714942+08:00" }, "BasicViewPara": { "Main": "red", "Border": "black", "Margin": 5 } }


這裡面有兩個 section 是我加進去的一個是 UserData , 一個是 BasicViewPara


方法1 . 我單純要讀取 UserData 中 的 Id 的值


Program.cs

namespace Core6Tutorial { public class Program { public static string UserId { get; set; } public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); //Result: //Dooooooooooooooooooooonmmmma UserId = builder.Configuration["UserData:Id"]; // Add services to the container. builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run(); } } }


這樣就可以取到  Dooooooooooooooooooooonmmmma


方法2. 透過 AddService 帶入到 每一個  PageModel 中透過 CTOR 去取得

Program.cs

namespace Core6Tutorial { public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); //Read Data from appsettings.json builder.Services.Configure<Models.BasicView>( builder.Configuration.GetSection("BasicViewPara") ); // Add services to the container. builder.Services.AddRazorPages(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } else { app.UseStatusCodePagesWithReExecute("/CError/{0}"); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run(); } } }


這裡面我有寫到一個簡單的物件 Models.BasicView.cs

namespace Core6Tutorial.Models { public class BasicView { public string Main { get; set; } public string Border { get; set; } public double Margin { get; set; } } }

在 PageModel 的部分

ReadAppsettingsData.cshtml.cs

using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Newtonsoft.Json; namespace Core6Tutorial.Pages { public class ReadAppsettingsDataModel : PageModel { private readonly Models.BasicView _BasicViewSetting; public ReadAppsettingsDataModel(Microsoft.Extensions.Options.IOptions<Models.BasicView> basicViewSetting) { _BasicViewSetting = basicViewSetting.Value; } public string Result {get;set;} public void OnGet() { Result += JsonConvert.SerializeObject(_BasicViewSetting); } } }


ReadAppsettingsData.cshtml

@page @model Core6Tutorial.Pages.ReadAppsettingsDataModel @{ } @Html.Raw(Model.Result)


Result:



其實方法2是最近才這樣用的,以前的用法都 會在 Startup.cs 的時候就先把一些參數讀取出來放在記憶體中

reference:

https://stackoverflow.com/questions/46940710/getting-value-from-appsettings-json-in-net-core/46940811#46940811

https://stackoverflow.com/questions/73862437/how-to-create-startup-class-in-asp-net-core-6-mvc

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-6.0


當麻許的碎念筆記 2014 | Donma Hsu Design.