ตรวจสอบวิธีการทํางานของ appsettings.json
สภาพ แวด ล้อม
- สตูดิโอภาพ
-
- สตูดิโอภาพ 2019
- แกนASP.NET
-
- 3.0
- 3.1
ในตอนแรก
เมื่อคุณสร้างโครงการหลักASP.NETใหม่ คุณสามารถสร้างappsettings.jsonและappsettings ไฟล์คอนฟิก development.jsonคือ รวมอยู่ในโครงการ
สิ่งที่ตั้งค่าที่นี่เป็นพารามิเตอร์ที่ตั้งค่าเป็นappsettings.json ในช่วงเวลาของการพัฒนาพารามิเตอร์ของคีย์เดียวกันเป็นappsettings ใช้การตั้งค่าที่เขียนทับใน Development.json
ในบทความนี้ผมอยากจะดูว่าพวกเขาจะสลับและโหลด
แก้ไขเพื่อดูว่าทํางานอย่างไร
ลองเพิ่มพารามิเตอร์ลงในแฟ้มการกําหนดค่าแต่ละแฟ้มเพื่อดูวิธีการทํางาน เพิ่มส่วนTestObjectแต่ละส่วน และเพิ่มพารามิเตอร์TestValue
ไฟล์ appsettings.json ถูกเขียนด้วยรหัสอักขระ SHIFT-JIS ดังนั้นหากคุณต้องการรวมภาษาญี่ปุ่น บันทึกอีกครั้งใน UTF-8
แอป
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"TestObject": {
"TestValue": "Root です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
การปรบมือ 1999
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"TestObject": {
"TestValue": "Development です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
ได้รับพารามิเตอร์ของไฟล์การกําหนดค่าในการกระทําดัชนีของHomeController.cs มีวิธีการของการได้รับโดยการระบุชั้นเรียนเป็น, แต่ฉันรักมันเพราะมันไม่ได้เรื่องนี้.
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
// DI で IConfiguration を受け取る
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
// appsettings.json から値を取得します。
// 階層化されている場合は GetSection を使用します。
ViewData["Message"] = _configuration.GetSection("TestObject").GetValue<string>("TestValue");
return View();
}
ถ้าคุณสร้าง ผูก และโหลดคลาส คุณจะพบรหัสคล้ายกับต่อไปนี้:
// クラス定義 public class TestObject { public string TestValue { get; set; } public string Comment { get; set; } } // 読み込み var testObject = _configuration.GetSection(nameof(TestObject)).Get<TestObject>();
แสดงค่าที่ได้รับใน Index.cshtml บนด้านมุมมอง
<p>appsettings.json から取得したテキストを表示</p>
<p>@ViewData["Message"]</p>
การตรวจแก้จุดบกพร่องรันในเครื่อง
สร้างโครงการ และดีบัก และพยายามเรียกใช้ appsettings คุณจะเห็นว่าการตั้งค่า development.json จะปรากฏขึ้น
การพัฒนาเป็นเหตุผลที่ทําไมตัวแปรสภาพแวดล้อมจะถูกโหลดเมื่อคุณเรียกใช้ app ที่มีASP.NETหลัก พารามิเตอร์ที่ตั้งค่าเป็นASPNETCORE_ENVIRONMENTเป็นพารามิเตอร์เป็นappsettings 1999 ไฟล์คอนฟิกที่ตรงกับส่วนXXXXถูกโหลดแล้วในขณะนี้
พัฒนาถูกตั้งค่าเมื่อดีบัก ซึ่งเป็นแท็บตรวจแก้จุดบกพร่องสําหรับคุณสมบัติของโครงการ คุณสามารถดูว่ามีการตั้งค่าในตัวแปรสภาพแวดล้อม
ถ้าคุณพยายามที่จะเปลี่ยนค่านี้เป็นค่าที่แตกต่างกัน และดีบัก ผมคิดว่าจะยืนยันว่าด้านการพัฒนาไม่ได้โหลดและด้านรากถูกโหลด
โดยวิธีการที่พารามิเตอร์นี้จะไม่แยกโดย Debug หรือนําออกใช้ดังนั้นหากคุณดีบักกับรุ่น พารามิเตอร์การพัฒนามีการใช้ การแก้ปัญหาและ Release ไม่สามารถแยกออกได้เช่นเดียวกับใน web.config แต่คุณสามารถลงทะเบียนหลายโปรไฟล์ได้ คุณสามารถดําเนินการเช่นการตรวจสอบการตั้งค่าการวางจําหน่ายโดยการสลับไปที่นั้น
ปรับใช้และทํางานใน IIS
ดังนั้นจะเกิดอะไรขึ้นถ้าคุณปรับใช้และเรียกใช้ใน IIS? ลองสร้างไซต์ใน IIS และปรับใช้โปรแกรมจริง
นี่คือการตั้งค่าเส้นทาง slated ที่จะใช้ ดังนั้นหากคุณกําลังปรับใช้โปรแกรมกับ IIS คุณไม่ต้องกังวลเกี่ยวกับการพัฒนาการตั้งค่า
คุณสามารถโหลดแฟ้มการกําหนดค่าในขณะดําเนินการถ้าคุณมีค่าใด ๆ ในตัวแปรสภาพแวดล้อมASPNETCORE_ENVIRONMENTบนด้าน IIS เปิดเอดิเตอร์การกําหนดค่าจากการตั้งค่าไซต์
จากส่วน เลือกaspNetCoreในsystem.webเซิร์ฟเวอร์
เลือกApplicationHost.configจากตําแหน่ง
เปิดคอลเลกชันของตัวแปรสภาพแวดล้อม
เพิ่มคอลเลกชัน
พิมพ์ ASPNETCORE_ENVIRONMENTในชื่อ แล้วพิมพ์ชื่อของแฟ้มการกําหนดค่าที่คุณต้องการโหลดลงในค่า
ถ้าคุณเริ่มต้นไซต์และดูหน้าจอเว็บ คุณจะเห็นว่า คุณกําลังโหลดแฟ้มการกําหนดค่าเป้าหมาย
สรุป
หากการกําหนดค่าเริ่มต้นเป็นกรณี appsettings ถ้ามีการโหลดและปรับใช้การตั้งค่า Development.json ในสภาพแวดล้อมการผลิตเช่น IIS ฉันคิดว่ามันตกลงที่จะคิดว่า appsettings.json จะถูกโหลด
คุณมีการพัฒนาเมื่อคุณสร้างโครงการ แต่คุณสามารถสร้าง appsettings มากกว่าหนึ่งและคุณสามารถเปลี่ยนส่วนการพัฒนาเป็นชื่อใด ๆ ถ้าคุณมี ASPNETCORE_ENVIRONMENTสถานที่ดําเนินการมากกว่าหนึ่งแห่ง