Baca dalam bahasa Inggris

Bagikan melalui


Penyusun Konfigurasi untuk ASP.NET

Oleh Stephen Molloy dan Rick Anderson

Penyusun konfigurasi menyediakan mekanisme modern dan tangkas bagi aplikasi ASP.NET untuk mendapatkan nilai konfigurasi dari sumber eksternal.

Penyusun konfigurasi:

  • Tersedia di .NET Framework 4.7.1 dan yang lebih baru.
  • Berikan mekanisme yang fleksibel untuk membaca nilai konfigurasi.
  • Atasi beberapa kebutuhan dasar aplikasi saat mereka pindah ke kontainer dan lingkungan yang berfokus pada cloud.
  • Dapat digunakan untuk meningkatkan perlindungan data konfigurasi dengan menggambar dari sumber yang sebelumnya tidak tersedia (misalnya, Azure Key Vault dan variabel lingkungan) dalam sistem konfigurasi .NET.

Penyusun konfigurasi kunci/nilai

Skenario umum yang dapat ditangani oleh penyusun konfigurasi adalah menyediakan mekanisme penggantian kunci/nilai dasar untuk bagian konfigurasi yang mengikuti pola kunci/nilai. Konsep .NET Framework dari ConfigurationBuilders tidak terbatas pada bagian atau pola konfigurasi tertentu. Namun, banyak penyusun konfigurasi di Microsoft.Configuration.ConfigurationBuilders (github, NuGet) bekerja dalam pola kunci/nilai.

Pengaturan penyusun konfigurasi kunci/nilai

Pengaturan berikut berlaku untuk semua penyusun konfigurasi kunci/nilai di Microsoft.Configuration.ConfigurationBuilders.

Mode

Penyusun konfigurasi menggunakan sumber eksternal informasi kunci/nilai untuk mengisi elemen kunci/nilai yang dipilih dari sistem konfigurasi. Secara khusus, bagian <appSettings/> dan <connectionStrings/> menerima perlakuan khusus dari penyusun konfigurasi. Penyusun bekerja dalam tiga mode:

  • Strict - Mode default. Dalam mode ini, penyusun konfigurasi hanya beroperasi pada bagian konfigurasi kunci/berpusat pada nilai yang terkenal. Strict mode menghitung setiap kunci di bagian . Jika kunci yang cocok ditemukan di sumber eksternal:

    • Penyusun konfigurasi menggantikan nilai di bagian konfigurasi yang dihasilkan dengan nilai dari sumber eksternal.
  • Greedy - Mode ini terkait Strict erat dengan mode. Daripada terbatas pada kunci yang sudah ada dalam konfigurasi asli:

    • Penyusun konfigurasi menambahkan semua pasangan kunci/nilai dari sumber eksternal ke bagian konfigurasi yang dihasilkan.
  • Expand - Beroperasi pada XML mentah sebelum diurai ke dalam objek bagian konfigurasi. Ini dapat dianggap sebagai perluasan token dalam string. Bagian mana pun dari string XML mentah yang cocok dengan pola ${token} adalah kandidat untuk ekspansi token. Jika tidak ada nilai terkait yang ditemukan di sumber eksternal, maka token tidak diubah. Penyusun dalam mode ini tidak terbatas pada bagian <appSettings/> dan <connectionStrings/> .

Markup berikut dari web.config memungkinkan EnvironmentConfigBuilder dalam Strict mode:

<configuration>

  <configSections>
    <section name="configBuilders" 
             type="System.Configuration.ConfigurationBuildersSection, 
             System.Configuration, Version=4.0.0.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a"
             restartOnExternalChanges="false" requirePermission="false" />
  </configSections>

  <configBuilders>
    <builders>
      <add name="MyEnvironment"
           type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, 
           Microsoft.Configuration.ConfigurationBuilders.Environment, 
           Version=1.0.0.0, Culture=neutral" />
    </builders>
  </configBuilders>

  <appSettings configBuilders="MyEnvironment">
    <add key="ServiceID" value="ServiceID value from web.config" />
    <add key="ServiceKey" value="ServiceKey value from web.config" />
  </appSettings>

  <connectionStrings configBuilders="MyEnvironment">
    <add name="default" connectionString="Data Source=web.config/mydb.db" />
  </connectionStrings>

Kode berikut membaca <appSettings/> dan <connectionStrings/> ditampilkan dalam file web.config sebelumnya:

using System;
using System.Configuration;
using System.Web.UI;

namespace MyConfigBuilders
{
    public partial class About : Page
    {
        public string ServiceID { get; set; }
        public string ServiceKey { get; set; }
        public string ConString { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            ServiceID = ConfigurationManager.AppSettings["ServiceID"];
            ServiceKey = ConfigurationManager.AppSettings["ServiceKey"];
            ConString = ConfigurationManager.ConnectionStrings["default"]
                                            ?.ConnectionString;
        }
    }
}

Kode sebelumnya akan mengatur nilai properti ke:

  • Nilai dalam file web.config jika kunci tidak diatur dalam variabel lingkungan.
  • Nilai variabel lingkungan, jika diatur.

Misalnya, ServiceID akan berisi:

  • "Nilai ServiceID dari web.config", jika variabel ServiceID lingkungan tidak diatur.
  • Nilai ServiceID variabel lingkungan, jika diatur.

Gambar berikut menunjukkan <appSettings/> kunci/nilai dari kumpulan file web.config sebelumnya di editor lingkungan:

Cuplikan layar memperlihatkan editor Variabel Lingkungan dengan variabel ServiceID dan ServiceKey disorot.

Catatan: Anda mungkin perlu keluar dan memulai ulang Visual Studio untuk melihat perubahan dalam variabel lingkungan.

Penanganan awalan

Awalan kunci dapat menyederhanakan kunci pengaturan karena:

  • Konfigurasi .NET Framework kompleks dan berlapis.
  • Sumber kunci/nilai eksternal umumnya dasar dan datar secara alami. Misalnya, variabel lingkungan tidak ditumpuk.

Gunakan salah satu pendekatan berikut untuk menyuntikkan dan <appSettings/> <connectionStrings/> ke dalam konfigurasi melalui variabel lingkungan:

  • EnvironmentConfigBuilder Dengan dalam mode default Strict dan nama kunci yang sesuai dalam file konfigurasi. Kode dan markup sebelumnya mengambil pendekatan ini. Menggunakan pendekatan ini Anda tidak dapat memiliki kunci bernama identik di dan <appSettings/> <connectionStrings/>.
  • Gunakan dua EnvironmentConfigBuilders dalam Greedy mode dengan awalan yang berbeda dan stripPrefix. Dengan pendekatan ini, aplikasi dapat membaca <appSettings/> dan <connectionStrings/> tanpa perlu memperbarui file konfigurasi. Bagian berikutnya, stripPrefix, menunjukkan cara melakukan ini.
  • Gunakan dua EnvironmentConfigBuilders dalam Greedy mode dengan awalan yang berbeda. Dengan pendekatan ini, Anda tidak dapat memiliki nama kunci duplikat karena nama kunci harus berbeda dengan awalan. Contohnya:
<configuration>

  <configSections>
    <section name="configBuilders"
             type="System.Configuration.ConfigurationBuildersSection, 
             System.Configuration, Version=4.0.0.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a"
             restartOnExternalChanges="false" requirePermission="false" />
  </configSections>

  <configBuilders>
    <builders>
      <add name="AS_Environment" mode="Greedy" prefix="AppSetting_"
           type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, 
           Microsoft.Configuration.ConfigurationBuilders.Environment" />
      <add name="CS_Environment" mode="Greedy" prefix="ConnStr_"
           type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, 
           Microsoft.Configuration.ConfigurationBuilders.Environment" />
    </builders>
  </configBuilders>

  <appSettings configBuilders="AS_Environment">
    <add key="AppSetting_ServiceID" value="ServiceID value from web.config" />
    <add key="AppSetting_default" value="AppSetting_default value from web.config" />
  </appSettings>

  <connectionStrings configBuilders="CS_Environment">
    <add name="ConnStr_default" connectionString="Data Source=web.config/mydb.db" />
  </connectionStrings>

Dengan markup sebelumnya, sumber kunci/nilai datar yang sama dapat digunakan untuk mengisi konfigurasi untuk dua bagian yang berbeda.

Gambar berikut menunjukkan <appSettings/> kunci/nilai dan <connectionStrings/> dari kumpulan file web.config sebelumnya di editor lingkungan:

Cuplikan layar memperlihatkan editor Variabel Lingkungan dengan variabel AppSetting_default, AppSetting_ServiceID, dan ConnStr_default disorot.

Kode berikut membaca <appSettings/> kunci/nilai dan <connectionStrings/> yang terkandung dalam file web.config sebelumnya:

public partial class Contact : Page
{
    public string ServiceID { get; set; }
    public string AppSetting_default { get; set; }
    public string ConString { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        ServiceID = ConfigurationManager.AppSettings["AppSetting_ServiceID"];
        AppSetting_default = ConfigurationManager.AppSettings["AppSetting_default"];
        ConString = ConfigurationManager.ConnectionStrings["ConnStr_default"]
                                     ?.ConnectionString;
    }
}

Kode sebelumnya akan mengatur nilai properti ke:

  • Nilai dalam file web.config jika kunci tidak diatur dalam variabel lingkungan.
  • Nilai variabel lingkungan, jika diatur.

Misalnya, menggunakan file web.config sebelumnya, kunci/nilai di gambar editor lingkungan sebelumnya, dan kode sebelumnya, nilai berikut diatur:

Tombol Nilai
AppSetting_ServiceID AppSetting_ServiceID dari variabel env
AppSetting_default nilai AppSetting_default dari env
ConnStr_default ConnStr_default val dari env

stripPrefix

stripPrefix: boolean, default ke false.

Markup XML sebelumnya memisahkan pengaturan aplikasi dari string koneksi tetapi memerlukan semua kunci dalam file web.config untuk menggunakan awalan yang ditentukan. Misalnya, awalan AppSetting harus ditambahkan ke ServiceID kunci ("AppSetting_ServiceID"). Dengan stripPrefix, awalan tidak digunakan dalam file web.config . Awalan diperlukan di sumber penyusun konfigurasi (misalnya, di lingkungan.) Kami mengantisipasi sebagian besar pengembang akan menggunakan stripPrefix.

Aplikasi biasanya menghapus awalan. Web.config berikut menghapus awalan:

<configuration>

  <configSections>
    <section name="configBuilders"
             type="System.Configuration.ConfigurationBuildersSection, 
             System.Configuration, Version=4.0.0.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a"
             restartOnExternalChanges="false" requirePermission="false" />
  </configSections>

  <configBuilders>
    <builders>
      <add name="AS_Environment" mode="Greedy" prefix="AppSetting_" 
           stripPrefix="true"
           type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, 
           Microsoft.Configuration.ConfigurationBuilders.Environment, 
           Version=1.0.0.0, Culture=neutral" />
      <add name="CS_Environment" mode="Greedy" prefix="ConnStr_" 
           stripPrefix="true"
            type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, 
           Microsoft.Configuration.ConfigurationBuilders.Environment, 
           Version=1.0.0.0, Culture=neutral" />
    </builders>
  </configBuilders>

  <appSettings configBuilders="AS_Environment">
    <add key="ServiceID" value="ServiceID value from web.config" />
    <add key="default" value="AppSetting_default value from web.config" />
  </appSettings>

  <connectionStrings configBuilders="CS_Environment">
    <add name="default" connectionString="Data Source=web.config/mydb.db" />
  </connectionStrings>

Dalam file web.config sebelumnya, default kunci berada di <appSettings/> dan <connectionStrings/>.

Gambar berikut menunjukkan <appSettings/> kunci/nilai dan <connectionStrings/> dari kumpulan file web.config sebelumnya di editor lingkungan:

Cuplikan layar memperlihatkan editor Variabel Lingkungan dengan variabel AppSetting_default, AppSetting_ServiceID, dan ConnStr_default disorot.

Kode berikut membaca <appSettings/> kunci/nilai dan <connectionStrings/> yang terkandung dalam file web.config sebelumnya:

public partial class About2 : Page
{
    public string ServiceID { get; set; }
    public string AppSetting_default { get; set; }
    public string ConString { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        ServiceID = ConfigurationManager.AppSettings["ServiceID"];
        AppSetting_default = ConfigurationManager.AppSettings["default"];
        ConString = ConfigurationManager.ConnectionStrings["default"]
                                        ?.ConnectionString;
    }
}

Kode sebelumnya akan mengatur nilai properti ke:

  • Nilai dalam file web.config jika kunci tidak diatur dalam variabel lingkungan.
  • Nilai variabel lingkungan, jika diatur.

Misalnya, menggunakan file web.config sebelumnya, kunci/nilai di gambar editor lingkungan sebelumnya, dan kode sebelumnya, nilai berikut diatur:

Tombol Nilai
ServiceID AppSetting_ServiceID dari variabel env
Default nilai AppSetting_default dari env
Default ConnStr_default val dari env

tokenPattern

tokenPattern: String, default ke @"\$\{(\w+)\}"

Perilaku Expand penyusun mencari XML mentah untuk token yang terlihat seperti ${token}. Pencarian dilakukan dengan ekspresi @"\$\{(\w+)\}"reguler default . Kumpulan karakter yang cocok \w lebih ketat daripada XML dan banyak sumber konfigurasi yang diizinkan. Gunakan tokenPattern saat lebih banyak karakter daripada @"\$\{(\w+)\}" yang diperlukan dalam nama token.

tokenPattern:Tali:

  • Memungkinkan pengembang mengubah regex yang digunakan untuk pencocokan token.
  • Tidak ada validasi yang dilakukan untuk memastikan itu adalah regex yang terbentuk dengan baik dan tidak berbahaya.
  • Ini harus berisi grup penangkapan. Seluruh regex harus cocok dengan seluruh token. Pengambilan pertama harus berupa nama token untuk mencari di sumber konfigurasi.

Penyusun konfigurasi di Microsoft.Configuration.ConfigurationBuilders

EnvironmentConfigBuilder

<add name="Environment"
    [mode|prefix|stripPrefix|tokenPattern] 
    type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.Environment" />

EnvironmentConfigBuilder:

  • Adalah yang paling sederhana dari penyusun konfigurasi.
  • Membaca nilai dari lingkungan.
  • Tidak memiliki opsi konfigurasi tambahan.
  • Nilai name atribut bersifat arbitrer.

Catatan: Di lingkungan kontainer Windows, variabel yang diatur pada run time hanya disuntikkan ke lingkungan proses EntryPoint. Aplikasi yang berjalan sebagai layanan atau proses non-EntryPoint tidak mengambil variabel ini kecuali disuntikkan melalui mekanisme dalam kontainer. Untuk kontainer berbasis ASP.NET IIS/, versi ServiceMonitor.exe saat ini menanganinya hanya di DefaultAppPool. Varian kontainer berbasis Windows lainnya mungkin perlu mengembangkan mekanisme injeksi mereka sendiri untuk proses non-EntryPoint.

UserSecretsConfigBuilder

Peringatan

Jangan pernah menyimpan kata sandi, string koneksi sensitif, atau data sensitif lainnya dalam kode sumber. Rahasia produksi tidak boleh digunakan untuk pengembangan atau pengujian.

<add name="UserSecrets"
    [mode|prefix|stripPrefix|tokenPattern]
    (userSecretsId="{secret string, typically a GUID}" | userSecretsFile="~\secrets.file")
    [optional="true"]
    type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.UserSecrets" />

Di XML sebelumnya, userSecretsFile jalur dapat menggunakan ~/ atau ~\. Misalnya, jalur dapat ditulis sebagai userSecretsFile="~/secrets.file. Lihat kelas ConfigurationBuilders Utils untuk informasi selengkapnya.

Penyusun konfigurasi ini menyediakan fitur yang mirip dengan ASP.NET Core Secret Manager.

UserSecretsConfigBuilder dapat digunakan dalam proyek .NET Framework, tetapi file rahasia harus ditentukan. Atau, Anda dapat menentukan UserSecretsId properti dalam file proyek dan membuat file rahasia mentah di lokasi yang benar untuk membaca. Untuk menjaga dependensi eksternal keluar dari proyek Anda, file rahasia diformat XML. Pemformatan XML adalah detail implementasi, dan format tidak boleh diandalkan. Jika Anda perlu berbagi file secrets.json dengan proyek .NET Core, pertimbangkan untuk menggunakan SimpleJsonConfigBuilder. SimpleJsonConfigBuilder Format untuk .NET Core juga harus dianggap sebagai detail implementasi yang dapat berubah.

Atribut konfigurasi untuk UserSecretsConfigBuilder:

  • userSecretsId - Ini adalah metode yang disukai untuk mengidentifikasi file rahasia XML. Ini berfungsi mirip dengan .NET Core, yang menggunakan UserSecretsId properti proyek untuk menyimpan pengidentifikasi ini. String harus unik, tidak perlu menjadi GUID. Dengan atribut ini, UserSecretsConfigBuilder tampilan di lokasi lokal terkenal (%APPDATA%\Microsoft\UserSecrets\<UserSecrets Id>\secrets.xml) untuk file rahasia milik pengidentifikasi ini.
  • userSecretsFile - Atribut opsional yang menentukan file yang berisi rahasia. Karakter ~ dapat digunakan di awal untuk mereferensikan akar aplikasi. Atribut ini atau userSecretsId atribut diperlukan. Jika keduanya ditentukan, userSecretsFile lebih diutamakan.
  • optional: boolean, nilai true default - Mencegah pengecualian jika file rahasia tidak dapat ditemukan.
  • Nilai name atribut bersifat arbitrer.

File rahasia memiliki format berikut:

<?xml version="1.0" encoding="utf-8" ?>
<root>
  <secrets ver="1.0">
    <secret name="secret key name" value="secret value" />
  </secrets>
</root>

AzureKeyVaultConfigBuilder

<add name="AzureKeyVault"
    [mode|prefix|stripPrefix|tokenPattern]
    (vaultName="MyVaultName" |
     uri="https:/MyVaultName.vault.azure.net")
    [version="secrets version"]
    [preloadSecretNames="true"]
    type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.Azure" />

AzureKeyVaultConfigBuilder membaca nilai yang disimpan di Azure Key Vault.

vaultName diperlukan (baik nama vault atau URI ke vault). Atribut lain memungkinkan kontrol tentang vault mana yang akan disambungkan, tetapi hanya diperlukan jika aplikasi tidak berjalan di lingkungan yang berfungsi dengan Microsoft.Azure.Services.AppAuthentication. Pustaka Autentikasi Layanan Azure digunakan untuk secara otomatis mengambil informasi koneksi dari lingkungan eksekusi jika memungkinkan. Anda dapat mengambil alih informasi koneksi secara otomatis dengan memberikan string koneksi.

  • vaultName - Diperlukan jika uri tidak disediakan. Menentukan nama vault di langganan Azure Anda untuk membaca pasangan kunci/nilai.
  • uri - Menyambungkan ke penyedia Key Vault lainnya dengan nilai yang ditentukan uri . Jika tidak ditentukan, Azure (vaultName) adalah penyedia vault.
  • version - Azure Key Vault menyediakan fitur penerapan versi untuk rahasia. Jika version ditentukan, pembuat hanya mengambil rahasia yang cocok dengan versi ini.
  • preloadSecretNames - Secara default, penyusun ini mengkueri semua nama kunci di brankas kunci saat diinisialisasi. Untuk mencegah membaca semua nilai kunci, atur atribut ini ke false. Mengatur ini untuk false membaca rahasia satu per satu. Membaca rahasia satu per satu dapat berguna jika vault memungkinkan akses "Dapatkan" tetapi bukan akses "Daftar". Catatan: Saat menggunakan Greedy mode, preloadSecretNames harus ( true default.)

KeyPerFileConfigBuilder

<add name="KeyPerFile"
    [mode|prefix|stripPrefix|tokenPattern]
    (directoryPath="PathToSourceDirectory")
    [ignorePrefix="ignore."]
    [keyDelimiter=":"]
    [optional="false"]
    type="Microsoft.Configuration.ConfigurationBuilders.KeyPerFileConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.KeyPerFile" />

KeyPerFileConfigBuilder adalah penyusun konfigurasi dasar yang menggunakan file direktori sebagai sumber nilai. Nama file adalah kuncinya, dan kontennya adalah nilainya. Penyusun konfigurasi ini dapat berguna saat berjalan di lingkungan kontainer yang diorkestrasi. Sistem seperti Docker Swarm dan Kubernetes menyediakan secrets kontainer windows yang diorkestrasi dengan cara kunci per file ini.

Detail atribut:

  • directoryPath - Wajib. Menentukan jalur untuk mencari nilai. Rahasia Docker untuk Windows disimpan di direktori C:\ProgramData\Docker\secrets secara default.
  • ignorePrefix - File yang dimulai dengan awalan ini dikecualikan. Default ke "abaikan.".
  • keyDelimiter - Nilai defaultnya adalah null. Jika ditentukan, penyusun konfigurasi melintasi beberapa tingkat direktori, membangun nama kunci dengan pemisah ini. Jika nilai ini adalah null, penyusun konfigurasi hanya melihat tingkat atas direktori.
  • optional - Nilai defaultnya adalah false. Menentukan apakah penyusun konfigurasi harus menyebabkan kesalahan jika direktori sumber tidak ada.

SimpleJsonConfigBuilder

Peringatan

Jangan pernah menyimpan kata sandi, string koneksi sensitif, atau data sensitif lainnya dalam kode sumber. Rahasia produksi tidak boleh digunakan untuk pengembangan atau pengujian.

<add name="SimpleJson"
    [mode|prefix|stripPrefix|tokenPattern]
    jsonFile="~\config.json"
    [optional="true"]
    [jsonMode="(Flat|Sectional)"]
    type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder,
    Microsoft.Configuration.ConfigurationBuilders.Json" />

Proyek .NET Core sering menggunakan file JSON untuk konfigurasi. Penyusun SimpleJsonConfigBuilder memungkinkan file .NET Core JSON digunakan dalam .NET Framework. Penyusun konfigurasi ini menyediakan pemetaan dasar dari sumber kunci/nilai datar ke area kunci/nilai tertentu dari konfigurasi .NET Framework. Penyusun konfigurasi ini tidak menyediakan konfigurasi hierarkis. File pencadangan JSON mirip dengan kamus, bukan objek hierarkis yang kompleks. File hierarkis multi-tingkat dapat digunakan. Penyedia flattenini adalah kedalaman dengan menambahkan nama properti di setiap tingkat menggunakan : sebagai pemisah.

Detail atribut:

  • jsonFile - Wajib. Menentukan file JSON yang akan dibaca. Karakter ~ dapat digunakan di awal untuk mereferensikan akar aplikasi.

  • optional - Boolean, nilai defaultnya adalah true. Mencegah melemparkan pengecualian jika file JSON tidak dapat ditemukan.

  • jsonMode - [Flat|Sectional]. Flat adalah defaultnya. Ketika jsonMode adalah Flat, file JSON adalah satu kunci datar/sumber nilai. EnvironmentConfigBuilder dan AzureKeyVaultConfigBuilder juga merupakan sumber kunci/nilai datar tunggal. Ketika dikonfigurasi SimpleJsonConfigBuilder dalam Sectional mode:

    • File JSON secara konseptual dibagi hanya di tingkat atas menjadi beberapa kamus.
    • Setiap kamus hanya diterapkan ke bagian konfigurasi yang cocok dengan nama properti tingkat atas yang melekat padanya. Contohnya:
    {
        "appSettings" : {
            "setting1" : "value1",
            "setting2" : "value2",
            "complex" : {
                "setting1" : "complex:value1",
                "setting2" : "complex:value2",
            }
        }
    }

Urutan penyusun konfigurasi

Lihat Urutan Eksekusi ConfigurationBuilders di repositori GitHub aspnet/MicrosoftConfigurationBuilders .

Menerapkan penyusun konfigurasi kunci/nilai kustom

Jika penyusun konfigurasi tidak memenuhi kebutuhan Anda, Anda dapat menulis yang kustom. Kelas KeyValueConfigBuilder dasar menangani mode substitusi dan sebagian besar masalah awalan. Proyek penerapan hanya perlu:

using Microsoft.Configuration.ConfigurationBuilders;
using System.Collections.Generic;

public class MyCustomConfigBuilder : KeyValueConfigBuilder
{
    public override string GetValue(string key)
    {
        // Key lookup should be case-insensitive, because most key/value collections in 
        // .NET Framework config sections are case-insensitive.
        return "Value for given key, or null.";
    }

    public override ICollection<KeyValuePair<string, string>> GetAllValues(string prefix)
    {
        // Populate the return collection.
        return new Dictionary<string, string>() { { "one", "1" }, { "two", "2" } };
    }
}

Kelas KeyValueConfigBuilder dasar menyediakan banyak pekerjaan dan perilaku yang konsisten di seluruh penyusun konfigurasi kunci/nilai.

Sumber Daya Tambahan: