Tidak yakin apa yang saya lewatkan di sini tetapi saya tidak bisa mendapatkan nilai dari appsettings.json di aplikasi inti .net saya. Saya memiliki appsettings.json sebagai:
{
"AppSettings": {
"Version": "One"
}
}
Memulai:
public class Startup
{
private IConfigurationRoot _configuration;
public Startup(IHostingEnvironment env)
{
_configuration = new ConfigurationBuilder()
}
public void ConfigureServices(IServiceCollection services)
{
//Here I setup to read appsettings
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
}
}
Model:
public class AppSettings
{
public string Version{ get; set; }
}
Pengendali:
public class HomeController : Controller
{
private readonly AppSettings _mySettings;
public HomeController(IOptions<AppSettings> settings)
{
//This is always null
_mySettings = settings.Value;
}
}
_mySettings
selalu nol. Apakah ada sesuatu yang saya lewatkan di sini?
c#
asp.net-core
asp.net-core-mvc
seorang pria
sumber
sumber
Jawaban:
Kelas Program dan Startup
.NET Core 2.x
Anda tidak perlu baru
IConfiguration
diStartup
konstruktor. Implementasinya akan disuntikkan oleh sistem DI..NET Core 1.x
Anda perlu memberitahu
Startup
untuk memuat file pengaturan aplikasi.Mendapatkan Nilai
Ada banyak cara Anda bisa mendapatkan nilai yang Anda konfigurasi dari pengaturan aplikasi:
ConfigurationBuilder.GetValue<T>
Katakanlah
appsettings.json
penampilan Anda seperti ini:Cara Sederhana
Anda dapat menyuntikkan seluruh konfigurasi ke konstruktor controller / class Anda (via
IConfiguration
) dan mendapatkan nilai yang Anda inginkan dengan kunci yang ditentukan:Pola Opsi
Ini
ConfigurationBuilder.GetValue<T>
berfungsi baik jika Anda hanya membutuhkan satu atau dua nilai dari pengaturan aplikasi. Tetapi jika Anda ingin mendapatkan beberapa nilai dari pengaturan aplikasi, atau Anda tidak ingin membuat kode string yang sulit di beberapa tempat, mungkin lebih mudah untuk menggunakan Pola Opsi . Pola opsi menggunakan kelas untuk mewakili hierarki / struktur.Untuk menggunakan pola opsi:
IOptions<T>
ke konstruktor dari controller / class yang ingin Anda nilai1. Tentukan kelas konfigurasi untuk mewakili struktur
Anda dapat mendefinisikan kelas dengan properti yang harus benar-benar cocok dengan tombol di pengaturan aplikasi Anda. Nama kelas tidak harus cocok dengan nama bagian dalam pengaturan aplikasi:
2. Daftarkan instance konfigurasi
Dan kemudian Anda perlu mendaftarkan instance konfigurasi ini di
ConfigureServices()
dalam memulai:3. Suntikkan IOptions
Terakhir pada pengontrol / kelas yang ingin Anda nilai, Anda perlu menyuntikkan
IOptions<AppIdentitySettings>
melalui konstruktor:sumber
IOptionsSnapshot<T>
sebagai gantiIOptions<T>
. Anda dapat melihat artikel ini: offering.solutions/blog/articles/2017/02/17/… . Saya belum memiliki kesempatan untuk mencobanya sendiri.Cukup buat file AnyName.cs dan rekatkan kode berikut.
Harus mengganti nama file YouAppSettingFile.json dengan nama file Anda.
File .json Anda akan terlihat seperti di bawah ini.
Sekarang kamu bisa menggunakannya.
Jangan lupa untuk Menambahkan Referensi di kelas Anda di tempat yang ingin Anda gunakan.
Kode untuk mengambil nilai.
sumber
Menambahkan ke jawaban David Liang untuk Core 2.0 -
appsettings.json
file terkait denganASPNETCORE_ENVIRONMENT
variabel.ASPNETCORE_ENVIRONMENT
dapat diatur ke nilai apapun, tapi tiga nilai-nilai yang didukung oleh kerangka kerja:Development
,Staging
, danProduction
. JikaASPNETCORE_ENVIRONMENT
tidak disetel, defaultnya adalahProduction
.Untuk ketiga nilai pengaturan aplikasi ini.ASPNETCORE_ENVIRONMENT.json file didukung di luar kotak -
appsettings.Staging.json
,appsettings.Development.json
danappsettings.Production.json
Tiga pengaturan aplikasi di atas file json dapat digunakan untuk mengkonfigurasi beberapa lingkungan.
Contoh -
appsettings.Staging.json
Gunakan
Configuration["config_var"]
untuk mengambil nilai konfigurasi apa pun.sumber
appsettings.json
+appsettings.{env.EnvironmentName}.json
. Jadi pernyataan bahwa ASP.NET Core hanya memuat file Development, Staging, dan Production appsettings.json saat ini salah.ASPNETCORE_ENVIRONMENT
setiap waktu? Segala sesuatunya jauh lebih mudah di .Net 4. Fanatik JSON ini benar-benar mengacaukannyaSaya kira cara paling sederhana adalah dengan DI. Contoh mencapai ke Controller.
sumber
services.AddSingleton(Configuration);
, sekarang berfungsiDi konstruktor kelas Startup, Anda dapat mengakses appsettings.json dan banyak pengaturan lainnya menggunakan objek IConfiguration yang disuntikkan:
Pembuat Startup.cs
Isi appsettings.json
sumber
sumber
Dalam kasus saya itu sederhana seperti menggunakan metode Bind () pada objek Konfigurasi. Dan kemudian tambahkan objek sebagai singleton di DI.
Objek Instruksi bisa serumit yang Anda inginkan.
sumber
Untuk ASP.NET Core 3.1 Anda dapat mengikuti panduan 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:
Ini berarti Anda dapat menyuntikkan
IConfiguration
dan mengambil nilai dengan kunci string, bahkan nilai bersarang. SukaIConfiguration["Parent:Child"];
Contoh:
appsettings.json
WeatherForecast.cs
sumber
IConfiguration["Parent:Child"]
sintaks?Saya pikir pilihan terbaik adalah:
Buat kelas model sebagai skema konfigurasi
Daftar di DI: services.Configure (Configuration.GetSection ("democonfig"));
Dapatkan nilai sebagai objek model dari DI di controller Anda:
sumber
Dari Asp.net core 2.2 ke atas Anda dapat kode seperti di bawah ini:
Langkah 1. Buat file kelas AppSettings.
File ini berisi beberapa metode untuk membantu mendapatkan nilai dengan kunci dari file appsettings.json. Terlihat seperti kode di bawah ini:
Langkah 2. Konfigurasi awal untuk objek AppSettings
Kita perlu mendeklarasikan dan memuat file appsettings.json ketika aplikasi dimulai, dan memuat informasi konfigurasi untuk objek AppSettings. Kami akan melakukan pekerjaan ini dalam konstruktor file Startup.cs. Harap perhatikan baris
AppSettings.Instance.SetConfiguration(Configuration);
Oke, sekarang saya punya file appsettings.json dengan beberapa tombol seperti di bawah ini:
Langkah 3. Baca nilai konfigurasi dari suatu tindakan
Saya membuat demo aksi di pengontrol Rumah seperti di bawah ini:
Dan di bawah ini hasilnya:
Klik untuk melihat hasilnya
Untuk informasi lebih lanjut, Anda bisa merujuk artikel mendapatkan nilai dari appsettings.json di asp.net core untuk kode lebih detail.
sumber
Sederhana: Di appsettings.json
Dalam file .cs:
sumber