Saya telah mengatur data AppSettings saya dalam pengaturan file aplikasi / Konfigurasi .json seperti ini:
{
"AppSettings": {
"token": "1234"
}
}
Saya telah mencari secara online tentang cara membaca nilai AppSettings dari file .json, tapi saya tidak bisa mendapatkan sesuatu yang bermanfaat.
Saya mencoba:
var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
Saya tahu dengan ASP.NET 4.0 Anda bisa melakukan ini:
System.Configuration.ConfigurationManager.AppSettings["token"];
Tetapi bagaimana saya melakukan ini di ASP.NET Core?
c#
.net
asp.net-core
.net-core
Oluwafemi
sumber
sumber
Jawaban:
Ini telah memiliki beberapa tikungan dan belokan. Saya telah memodifikasi jawaban ini agar mutakhir dengan ASP.NET Core 2.0 (per 26/02/2018).
Ini sebagian besar diambil dari dokumentasi resmi :
Untuk bekerja dengan pengaturan di aplikasi ASP.NET Anda, disarankan agar Anda hanya instantiate
Configuration
diStartup
kelas aplikasi Anda . Kemudian, gunakan pola Opsi untuk mengakses pengaturan individual. Katakanlah kita memilikiappsettings.json
file yang terlihat seperti ini:Dan kami memiliki objek POCO yang mewakili konfigurasi:
Sekarang kita membangun konfigurasi di
Startup.cs
:Catatan yang
appsettings.json
akan didaftarkan secara default di .NET Core 2.0. Kami juga dapat mendaftarkanappsettings.{Environment}.json
file konfigurasi per lingkungan jika diperlukan.Jika kami ingin menyuntikkan konfigurasi kami ke pengontrol kami, kami harus mendaftarkannya dengan runtime. Kami melakukannya melalui
Startup.ConfigureServices
:Dan kami menyuntikkannya seperti ini:
Kelas lengkap
Startup
:sumber
"1.0.0-beta4"
bekerja pada milikku tidak"1.0.0-alpha4"
. Terima kasih banyak!Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<....Settings>'
Microsoft.Extensions.Options.ConfigurationExtensions
itu berfungsi seperti yang diharapkan.Pertama: Nama perakitan dan namespace Microsoft.Framework.ConfigurationModel telah berubah menjadi Microsoft.Framework.Configuration. Jadi, Anda harus menggunakan: misalnya
sebagai ketergantungan pada
project.json
. Gunakan beta5 atau 6 jika Anda belum menginstalnya. Kemudian Anda dapat melakukan sesuatu seperti dalam hal iniStartup.cs
.Jika Anda ingin mengambil variabel dari config.json, Anda bisa langsung menggunakan:
atau Anda dapat membuat kelas yang disebut AppSettings seperti ini:
dan konfigurasikan layanan seperti ini:
dan kemudian mengaksesnya melalui misalnya pengontrol seperti ini:
sumber
Configuration.Get<AppSettings>()
untuk menghapus seluruh file bukan bagian tertentu.Untuk .NET Core 2.0, segalanya telah berubah sedikit. Konstruktor startup mengambil objek Konfigurasi sebagai parameter, Jadi
ConfigurationBuilder
tidak diperlukan menggunakan. Ini milik saya:POCO saya adalah
StorageOptions
objek yang disebutkan di atas:Dan konfigurasinya sebenarnya adalah subbagian dari
appsettings.json
file saya , bernamaAzureStorageConfig
:Satu-satunya hal yang akan saya tambahkan adalah, karena konstruktor telah berubah, saya belum menguji apakah perlu dilakukan sesuatu tambahan untuk memuatnya
appsettings.<environmentname>.json
sebagai lawanappsettings.json
.sumber
public HomeController(IOptions<StorageOptions> settings)
, saya mendapatkan pesan kesalahan ini: Tipe kompleks model terikat tidak boleh abstrak atau tipe nilai dan harus memiliki konstruktor tanpa parameter.Dengan .NET Core 2.2, dan dengan cara sesederhana mungkin ...
appsettings.json
secara otomatis dimuat dan tersedia baik melalui konstruktor atau injeksi tindakan, dan adaGetSection
metodeIConfiguration
juga. Tidak perlu mengubahStartup.cs
atauProgram.cs
jika semua yang Anda butuhkan adalahappsettings.json
.sumber
var myValue = config["MyKey"]
Jika Anda hanya ingin mendapatkan nilai token lalu gunakan
Configuration["AppSettings:token"]
sumber
.NET Core 3.0
Mungkin itu bukan cara terbaik untuk mendapatkan nilai dari appsettings.json , tetapi sederhana dan berfungsi di aplikasi saya !!
File appsettings.json
Pengendali:
Di atas :
Dalam kode Anda:
sumber
Berikut ini berfungsi untuk aplikasi konsol;
Instal paket NuGet berikut (
.csproj
);Buat
appsettings.json
di tingkat root. Klik kanan padanya dan "Salin ke Direktori Keluaran" sebagai " Salin jika lebih baru ".File konfigurasi sampel:
Program.cs
configurationSection.Key
danconfigurationSection.Value
akan memiliki properti konfigurasi.sumber
Untuk .NET Core 2.0, Anda cukup:
Nyatakan pasangan kunci / nilai Anda di appsettings.json:
Suntikkan layanan konfigurasi di startup.cs, dan dapatkan nilai menggunakan layanan
sumber
Saya ragu ini adalah praktik yang baik tetapi ini bekerja secara lokal. Saya akan memperbarui ini jika gagal ketika saya mempublikasikan / menyebarkan (ke layanan web IIS).
Langkah 1 - Tambahkan perakitan ini ke bagian atas kelas Anda (dalam kasus saya, kelas controller):
Langkah 2 - Tambahkan ini atau sesuatu seperti itu:
Langkah 3 - Panggil nilai kunci Anda dengan melakukan ini (mengembalikan string):
sumber
appsettings.json
ada di direktori yang benarHanya untuk melengkapi jawaban Yuval Itzchakov.
Anda dapat memuat konfigurasi tanpa fungsi pembangun, Anda bisa menyuntikkannya.
sumber
Selain jawaban yang ada saya ingin menyebutkan bahwa kadang-kadang hal ini mungkin berguna untuk memiliki metode ekstensi untuk
IConfiguration
untuk mudahnya.Saya menyimpan JWT config di appsettings.json sehingga kelas metode ekstensi saya terlihat sebagai berikut:
Ini menghemat banyak baris dan Anda hanya menulis kode bersih dan minimal:
Anda juga dapat mendaftarkan
IConfiguration
instance sebagai singleton dan menyuntikkannya di mana pun Anda butuhkan - Saya menggunakan wadah Autofac berikut cara melakukannya:Anda dapat melakukan hal yang sama dengan Injeksi Ketergantungan MS:
sumber
Inilah kasus penggunaan penuh untuk ASP.NET Core!
articles.json
ArticleContainer.cs
Startup.cs
Index.cshtml.cs
Index.cshtml.cs
sumber
Mereka terus mengubah hal-hal - baru saja memperbarui Visual Studio dan memiliki seluruh proyek bom, di jalan menuju pemulihan dan cara baru terlihat seperti ini:
Saya terus melewatkan baris ini!
sumber
They just keep changing things
. Ini. Hampir setiap jawaban pada halaman ini hanya berlaku untuk versi tertentu .Net Core..NET Core 2.1.0
3. Instal dependensi berikut:
4. Kemudian, PENTING: Klik kanan pada file appsettings.json -> klik Properties -> pilih Copy jika yang lebih baru:
Akhirnya, Anda dapat melakukan:
config ["key1"]
Menimbang bahwa file konfigurasi saya akan terlihat seperti ini:
sumber
Anda dapat mencoba kode di bawah ini. Ini bekerja untuk saya.
Di sini saya telah membuat satu kelas untuk mendapatkan string koneksi dan pengaturan aplikasi.
Saya file Startup.cs Anda harus mendaftar kelas seperti di bawah ini.
sumber
Untuk ASP.NET Core 3.1 Anda dapat mengikuti dokumentasi ini:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Ketika Anda membuat proyek ASP.NET Core 3.1 baru Anda akan memiliki baris konfigurasi berikut
Program.cs
:Ini memungkinkan yang berikut:
Ini berarti Anda dapat menyuntikkan
IConfiguration
dan mengambil nilai dengan kunci string, bahkan nilai bersarang. SukaIConfiguration ["Parent:Child"];
Contoh:
appsettings.json
WeatherForecast.cs
sumber
Apakah ini "curang"? Saya baru saja membuat Konfigurasi saya di kelas Startup statis, dan kemudian saya dapat mengaksesnya dari tempat lain:
sumber
Dapatkan di dalam pengontrol sebagai objek melalui panggilan
Get<YourType>()
:sumber
Pertama Anda harus menyuntikkan konfigurasi IC dan kemudian untuk membaca dari pengaturan aplikasi, Anda dapat menggunakan salah satu metode ini:
Dapatkan data bagian
Dapatkan nilai dalam bagian
Dapatkan nilai bersarang di dalam bagian
sumber
Cara .NET Core 2.2
(Tidak diragukan Microsoft akan mengubahnya lagi menjadi sesuatu yang sama sekali berbeda di versi .NET berikutnya.)
1. appSettings.json
Mungkin terlihat seperti ini. Di sini kita akan memuat Setting1 dan Setting2
2. AppSettings.cs
Kelas POCO untuk mengadakan Setting1 dan Setting2. Kami akan memuat appsettings.json ke objek kelas ini. Struktur kelas POCO harus sesuai dengan file JSON, properti dapat bersarang di dalam properti / kelas lain jika diinginkan.
3 Startup.cs
Muat appSettings.json ke dalam Anda objek AppSettings dan mulai menggunakannya:
sumber
Dengan iterasi terbaru dari netcoreapp 3.1, Anda dapat melakukannya dengan mudah tanpa ketergantungan pihak ketiga.
Saya membuat intisari untuk ini , tetapi Anda bisa menggunakan kelas ini untuk membaca file JSON dan mengembalikan properti dinamis.
Saya secara khusus membuat ini sehingga saya bisa menggunakan appconfig.json di aplikasi konsol dotnet saya. Saya hanya menempatkan ini di
Program.Main
fungsi saya :Dan ini akan mengembalikan
dynamic
objek untuk properti. (A JsonElement jika itu bukan primitif).appsettings.json
File saya terlihat seperti ini:sumber