只有累積,沒有奇蹟

2023年8月30日 星期三

[NETCore] 如何在 ASP.NET Core 中使用 YAML

前言
今天同事在分享 ASP.NET Core 時介紹使用 YAML 作為組態設定檔,自己在過去比較少接觸 YAML 設定檔,也趁此機會來好好讓彼此熟悉一下,在 YAML 官網介紹說明文字如下
YAML is a human friendly data serialization standard for all programming languages.
YAML 是一種可讀性高,適用於表達資料序列化的格式,在公司 CI\CD 流程中 Docker 以及 Ansible 都有用到 yaml 作為設定檔情境,被越來越多系統使用,YAML 語法在使用上特性區分大小寫,用 空白 縮行做為資料的階層,可以使用 # 作為註解方便人員閱讀,如果有興趣可以閱讀 YAML 语言教程 了解更多關於 YAML 使用方式,使用方式這裡不在多加說明。在 ASP.NET Core 中在預設 Template 專案範本是使用 json 作為設定檔,今天就是要分享的是將 ASP.NET Core 設定檔轉換為 YAML 的方式若有問題歡迎提出一起討論或是給予指導


安裝
在使用前要安裝 YAML 相關的 Library,這裡要介紹的是由微軟 MVP Andrew Lock 所開發 NetEscapades.Configuration,首先先開啟 Nuget Package Manage 輸入 NetEscapades,選擇 NetEscapades.Configuration.Yaml,點選下載
也可以透過 Nuget Package Console 輸入下列指令
  1. Install-Package NetEscapades.Configuration.Yaml -Version 1.6.0
安裝完畢之後到專案檔底下確認是否有安裝成功
  1. <PackageReference Include="NetEscapades.Configuration.Yaml" Version="1.6.0" />
備註 : YAML 官網推薦 ASP.NET 套件為 YamlDotNet、yaml-net、yatools.net,有興趣也可以試試看 

使用方式
接著新增 settings.yml 並設定檔案內容如下,自訂 Account 區段,其中裡面定義 Account 為 Marcus 與 Title 為 This is a book from Yaml config 其組態設定屬性與相對應的值
  1. Account:
  2. Name: Marcus
  3. Title: This is a book from Yaml config.
請記得調整 yml 檔案的 copy to output Directory 指定為 copy always 或是 copy if news,避免測試時找不到
並定義 yml 中要對應的類別 Account 屬性 Name 與 Title 
  1. public class Account
  2. {
  3. public string Name { get; set; }
  4. public string Title { get; set; }
  5. }
下一步就是告知應用程式啟動時需要一併考慮 settings.yml 檔案內容,修改 progmam.cs 中的 CreateWebHostBuilder 的代碼如下
  1. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  2. WebHost.CreateDefaultBuilder(args)
  3. .ConfigureAppConfiguration(builder =>
  4. {
  5. builder.AddYamlFile("settings.yml", optional: true);
  6. })
  7. .UseStartup<Startup>();
小提醒 : 在 WebHost.CreateDefaultBuilder 中有定義 BasePath 路徑位置,如果是 console 就需要自己設定 config 路徑

接著調整 Startup 檔案中  ConfigureService  加上以下代碼,指定要取得的內容是從 Account 區段中取得
  1. services.Configure<Account>(Configuration.GetSection("Account"));
這邊使用在 Controller 建構子時注入 IOptions,其型別為 Account 
  1. public Account _account { get; set; }
  2.  
  3. public ValuesController(IOptions<Account> accountConfig)
  4. {
  5. _account = accountConfig.Value;
  6. }
接著可以直接在 get 方法使用 Account 類別內容,回傳 name 與 title 的值
  1. [HttpGet]
  2. public ActionResult<string> Get()
  3. {
  4. return new string[] {_account.Name, _account.Title};
  5. }
最後輸出結果如下,成功的取得 setting.yml 檔案中的內容
使用與取得 appsettings.json 相同,簡單好上手 ! 

同場加映
同事在介紹過程中提到如果不熟悉 yaml 語法的話,可以透過 JSON TO YAML 網站將 json 內容快速轉換為 YAML 格式,如果各位跟我一樣是 YAML 新手的話也可以試試看此網站 : 傳送門,讓寫出來的 YAML 檔案格式更正確,Happy Coding !

參考
Configuration in ASP.NET Core
Creating a custom ConfigurationProvider in ASP.NET Core to parse YAML

Related Posts:

  • [VS2017] 如何修改 Visual Studio IDE 顯示語系 前言 目前筆電使用的 Visual Studio 是繁體中文版,在使用上用起來沒英文版那麼順,很多字詞在翻譯上總是讓人覺得驚喜,忍無可忍無須再忍決定改為英文版,過去 VS 可以透過下載的方式安裝語言包,但這招在 Visual Studio 2017 似乎無效(?,這邊簡單紀錄 Visual Studio 如何安裝不同語系的過程 設定語系 IDE 語系設定  設定方式 : 工具 > 選項 > 環境… Read More
  • [UnitTest] Visual Studio 2017 按右鍵無法建立單元測試 ? 問題 最近心血來潮使用家中舊電腦小白寫 Code,在練習測試中發現竟然有點怪異,在要測試的 method 按下右鍵沒有 建立單元測試 Create Unit Test 選項,但相同練習專案拿到公司筆電就是正常的,經比對後發現舊筆電 Visual Studio 版本少安裝測試功能,以下簡單紀錄解決問題的過程 解決方案 在 Visual Studio 2017 早期版本這是已知問題,有開發者在 vs community 回報給開… Read More
  • [.NET] 無法載入檔案或組件 'Newtonsoft.Json' 或其相依性的其中之一 (發生例外狀況於 HRESULT: 0x80131040)問題 接獲同事報案,反應在測試環境出現以下錯誤訊息 無法載入檔案或組件 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' 或其相依性的其中之一。 找到的組件資訊清單定義與組件參考不符。 (發生例外狀況於 HRESULT: 0x80131040) ,實際專案底下 bin 資料夾該 dll 是存在的,心想這問題… Read More
  • [UnitTest] Visual Studio 2017 新增單元測試時沒有 NUnit 選項 ?前言 新筆電總是讓人充滿驚喜,在使用上除了要重新安裝常用的開發工具外,像是 Visual Studio & SQL Server..等必須工具,還有些常用的套件與小工具也要一併安裝,NUnit 是蠻常用的 Test Framwroek 之一,在寫測試時在要測試的 method 下按下右鍵 create Unit Tests,選擇要使用測試的 Test Framework 即可,在測試專案中預設只有 MSTest 選項,如果需要 NUnit… Read More
  • [AWS] 使用 AWS SDK上傳檔案到 AWS S3前言 最近在與第三方做串接時,有個需求是要將圖片存起來放在 Application Server 上,與同事討論建議將圖片放在AWS S3 上,多年前有微軟剛推出 Azure 時有接觸過一些,但這幾年隨著年紀增長早已忘光光,這篇簡單紀錄 C# 透過 AWS SDK 將圖片上傳到 AWS S3 上的步驟與要注意的細節 AWS S3  Amazon Simple Storage Service 功能簡稱 S3,是Amazon的物件儲存服務,… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com