Asp.net Core appsettings.json ve appsettings.Environment.json. Configuration'ların birbirini ezmesine Giriş.
Tags: dotnet, csharp
Published: 2021-10-04 09:09:00

Ders : Asp.net core
Konu : appsettings.Environment.json dosyasında olan configuration'ların, appsetting.json dosyasındaki configuration'ları ezmesi.

Adımlar : 

1.) Bir model-view-controller uygulaması yaratın.

2.) appsettings.json aşağıdaki gibi TODO listesini ekleyelim (diğer ayarları silmeyelim kesinlikle sadece ekliyoruz) : 

```
"TODO": {
    "Bir": "1",
    "Iki": "2",
    "Uc": "3",
    "Dort": "4",
    "Bes": "5",
    "Alti": "6"
  }
```
3.) appsettings.json dosyasını aşağıdaki expand edelim : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvsxj18118ydt30mkuqa.png)

ve appsettings.Development.json dosyasını açalım.

Daha sonra : appsettings.Development.json dosyasına aşağıdaki TODO listesini ekleyelim : 
```
"TODO": {
    "Bir": "11",
    "Iki": "22",
    "Uc": "33",
    "Dort": "44",
    "Bes": "55",
    "Alti": "66"
  }
```

##### Amacım sizlere appsettings.Development.json dosyasında configuration ayarlarının, appsettings.json ayarları ezdiğini göstermek, bunu için : HomeController'a aşağıdaki gibi IConfiguration di(dependecy injection) olarak eklemenizi gerekiyor. Yani : 

```
 public class HomeController : Controller
    {
        private readonly IConfiguration _configuration;
        . 
        . 
        .
        public HomeController(..., IConfiguration configuration)
        {
            
            _configuration = configuration;
            .
            .
            .
        }
.
.
.

```  
HomeController'ın yukarıdaki benzer olması gerekiyor. (Üç noktalar diğer eklenebilcek şeyler gösteriyor. Kopyalarken üç noktaları siliniz.)

4.) Index.cshtml dosyasına appsettings'deki TODO listesi yazdırmak istiyorum. Bunun için : Index action'da bir  tane List<string> yaratıyorum ve daha sonra configuration'dan appsettings'in içerisindeki TODO item'larını List<string> geçeceğim. Yani : 

```
 public IActionResult Index()
        {
            List<string> degerler = new List<string>();

            string bir = _configuration["TODO:Bir"];
            string Iki = _configuration["TODO:Iki"];
            string Uc = _configuration["TODO:Uc"];
            string Dort = _configuration["TODO:Dort"];
            string Bes = _configuration["TODO:Bes"];
            string Alti = _configuration["TODO:Alti"];

            degerler.Add(bir);
            degerler.Add(Iki);
            degerler.Add(Uc);
            degerler.Add(Dort);
            degerler.Add(Bes);
            degerler.Add(Alti);
            return View(degerler);
```

Burada yaptığım:  "degerler" adında bir liste yarattım ve _configuration'dan  "TODO:{item}" diyerek string değerleri appsettings dan almayı başardım. Daha sonra ise degerler listesine sayiları(bir,Iki,Uc vs..) ekleyip View' a model olarak döndürdüm.

5.) Şimdi yapmam gereken gönderdiğim listeyi Index.cshtml model olarak kullanmak. Bunun için Index.cshtml aşağıdaki gibi değiştirelim : 

```
@model List<string>  
@foreach (var item in Model)
    {
        <p>@item</p>
    }
```

6.) Uygulamayı çalıştıralım, göreceğiniz değerler aşağıki gibi olması gerekiyor : 

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6piusl01cre5f81w3yyv.png)
 
 
Sonuç : Gördüğünüz üzere appsettings.json dosyasında ve appsettings.Development.json dosyasında aynı isme sahip olan(TODO) configuration ayarlarından, appsettings.Development.json daki ayarlar üstün geldi(yani appsettings.json'ı ezdi.).

Bir dahaki yazıda görüşmek dileğiyle.

Mustafa Samed Yeyin.

En iyi dileklerim ile.