Asp.net core environment variables Giriş.
Tags: dotnet, csharp
Published: 2021-10-05 17:38:24

## Environement variables ne işe yarar ?

Uygulamanın configuration'larını yapar. 

Not: Environment variable key-value yapısındadır.

## Neden ihtiyaç duyulur ?

Diyelimki uygulamayı publish ettiniz source code'unuz başka birisinin eline bir şekilde geçti. "appsettings.json" "appsettings.Environment.json" configuration'larınızı kötü niyetli kişi okuyabilir. Ama environment variable olarak geçilen değerleri okuyamaz.

## Environement variable nasıl atarız ve değerlerini değiştiririz ? 

1.) Visual studio projece sağ click atıp properties seçelim : 

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

Debug menüsüne geliniz : 

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

Aşağıdaki gibi add buton'una tıklarsanız key-value pair şeklinde evironment variable eklemiş oluruz : 

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

İstediğiniz key'e karşılık istediğiniz değer'i verebilirisiniz.

Not: ASPNETCORE_ENVIRONMENT key'ine karşılık olarak "Development","Staging","Production" değerlerinden birinin verilmesi evrenseldir.

2.) "launchSettings.json"dan environment variable verebiliriz :  

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nuhctrxh8xaronp3nq0d.png)
 
 Properties altında "launchSettings.json" çift tıklayın dosyayı açın :

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

Gördüğünüz üzere environmentVariables içerisinde ASPNETCORE_ENVIRONMENT environment variable'ı var. IIS veya Project ismine göre environmentVariables değiştrebilirisiniz veya yaratabilirsiniz.

## Environment variable'lara code içerisinden nasıl okuruz ? 

a.) Şuana kadar merak etmiş olmalsınız ki configure metodunun içinde parametre olarak IWebHostEnvironment geçiliyor.

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

 Bu IWebHostEnvironment bize uygulamanın ASPNETCORE_ENVIRONMENT adlı envrionment variable değerlerini bize verebilmektedir.
```
 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                // ASPNETCORE_ENVIRONMENT Development ise bir şeyler yap.
            }
            if (env.IsStaging())
            {
                // ASPNETCORE_ENVIRONMENT Staging ise bir şeyler yap.
            }
            if (env.IsProduction())
            {
                // ASPNETCORE_ENVIRONMENT Production ise bir şeyler yap.
            }
.
.
.
```
b.) Eğer örneğin aşağıdaki gibi bir environment variable belirlediyseniz  

![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/py6hkbp0wjilk2gz6bwn.png)
 
Bu environment variable'a şöyle ulaşabilirsiniz:
```
 if (Environment.GetEnvironmentVariable("Mustafa")=="24")
            {
                // Mustafa 24 ise bir şeyler yap.
            }
```

## Environment variable'lara göre düzenlemeleri .cshtml dosyası içerisinde nasıl okuruz ?

Örneğin Index.cshtml dosyasının içerisine şu kodları yazarsak : 
a.) include verilen parametreye eşitse ASPNETCORE_ENVIRONMENT variable'ı içerisindeki yazı yazdırılı.
```
<environment include="Development">
    <div>"include" dersek "ASPNETCORE_ENVIRONMENT" "Development"a eşit olursa bu yazıyı yazdırır Index.chtml dosyası. </div>
</environment>


```
b.) exclude verilen parametreye eşitse ASPNETCORE_ENVIRONMENT variable'ına içerisindeki yazı yazdırılmaz.
```
<environment exclude="Development">
    <div>"exclude" dersek "ASPNETCORE_ENVIRONMENT" "Development"a eşit olursa bu yazıyı yazdırmaz Index.chtml dosyası.</div>
</environment>

```

Sonuç : 
* Environment variable "nedir"ini, "neden güvenlidir"ini ve "nasıl tanımladığını" anladık.
* IWebHostEnvironment  ile nasıl ASPNETCORE_ENVIRONMENT kontrolu yapabileceğimizi gördük : env.IsDevelopment() vs..
* Environment.GetEnvironmentVariable("key") kullarak custom olarak yazdığımız environment variable'larımızı nasıl erişebileceğimizi gördük.
* environment tag helper'ına verilen exclude ve include özellikleri ile  ASPNETCORE_ENVIRONMENT variable'ının değerini göre .cshtml dosyasını nasıl değiştirebileceğimiziz gördük.

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

Mustafa Samed Yeyin.

En iyi dileklerim ile.