ASP.NET Core Environments Nedir?

ASP.NET Core Environments, uygulamanızın farklı çalışma koşullarına (örneğin, geliştirme, test, üretim) göre nasıl davranacağını belirlemek için kullanılan bir özelliktir. Çevreler (environments), yapılandırmaları ve uygulama davranışlarını kolayca yönetmenizi sağlar. Örneğin, bir uygulama geliştirme aşamasında hata ayıklama için daha fazla bilgi verirken, üretim ortamında daha az bilgi gösterir.

ASP.NET Core, varsayılan olarak aşağıdaki üç ortamı tanımlar:

Development: Geliştirme sırasında kullanılır. Genellikle hata ayıklama bilgileri ve detaylı loglama özellikleri açıktır. .

Staging: Test veya ön prodüksiyon (pre-production) amacıyla kullanılır. Üretim ortamına geçmeden önce uygulama test edilir. Uygulamanın üretim ortamına benzer şekilde davranması sağlanır.

Production: Canlı ortamdır. Performans ve güvenlik odaklıdır. Hata mesajları minimaldir ve kullanıcıya fazla bilgi verilmez.

Ortam Nasıl Belirlenir?

ASP.NET Core, ortamı belirlemek için bir ASPNETCORE_ENVIRONMENT değişkeni kullanır. Bu değişken şu kaynaklardan okunabilir:

launchSettings.json:Properties/launchSettings.json dosyasında tanımlanır.

{
  "profiles": {
    "IIS Express": {
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MyApp": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Production"
      }
    }
  }
}

launchSettings.json nedir?

launchSettings.json dosyası, bir .NET uygulamasının geliştirme ortamında çalıştırılmasını özelleştiren bir yapılandırma dosyasıdır. Bu dosya, genellikle Visual Studio veya Visual Studio Code gibi IDE’lerde, uygulamanın nasıl başlatılacağını, hangi port üzerinde çalışacağını, hangi ortam değişkenlerinin kullanılacağını vb. belirlemek için kullanılır.

launchSettings.json Dosyasının İçeriği

Bu dosya, genellikle .NET Core ve .NET 5+ projelerinde bulunur ve şu bölümleri içerir:

  1. profiles: Uygulamanın çalıştırılabilmesi için birden fazla profil tanımlanabilir. Her profil, uygulamanın başlatılma şeklini özelleştirebilir. Örneğin, geliştirme, yayınlama veya test ortamları için farklı ayarlar tanımlanabilir.
  2. environmentVariables: Uygulamanın çalıştırılmasında kullanılacak çevre değişkenleri burada tanımlanabilir. Örneğin, veritabanı bağlantı dizeleri, API anahtarları gibi.
  3. applicationUrl: Uygulamanın hangi URL’den çalışacağını belirtir. Bu, genellikle geliştirici bilgisayarında çalışan bir web uygulamasının hangi port üzerinde dinleyeceğini belirtmek için kullanılır.
  4. dotnetRunMessages: dotnet run komutuyla uygulama başlatıldığında gösterilecek olan mesajların kontrol edilmesini sağlar.

Örnek bir launchSettings.json Dosyası

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:5000",
      "sslPort": 44300
    }
  },
  "profiles": {
    "IIS Express": {
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5000",
      "sslPort": 44300,
      "commandName": "IISExpress"
    },
    "ProjectName": {
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:5001",
      "commandName": "Project"
    }
  }
}

Ortam Bilgisi Kullanımı

Ortam bilgisini okumak ve uygulama davranışlarını dinamik hale getirmek için IHostEnvironment veya IWebHostEnvironment kullanılabilir.

if (_env.IsDevelopment())
{
    app.UseDeveloperExceptionPage(); // Detaylı hata sayfası
}
else
{
    app.UseExceptionHandler("/Home/Error"); // Üretim hata sayfası
    app.UseHsts(); // HTTPS zorunlu
}

En İyi Uygulama (Best Practices)

  1. Geliştirme Ortamını Sadece Yerel Bilgisayarlarda Kullanın: Üretim ortamında hata mesajlarının fazla detaylı olması güvenlik riskine yol açabilir.
  2. Gizli Bilgileri Çevre Değişkenleri ile Yönetin: Örneğin, veritabanı bağlantı bilgilerini appsettings.json yerine ortam değişkenlerinde tutabilirsiniz.
  3. Ortam Ayarlarını Farklı Dosyalarda Tutun: ASP.NET Core, appsettings.{Environment}.json dosyalarını destekler.
  4. ASP.NET Core, yapılandırmaları farklı ortamlara göre ayarlamanızı kolaylaştırır. Bunun için appsettings.json dosyasının ortam tabanlı sürümlerini kullanabilirsiniz. Örnek: appsettings.json ve appsettings.{Environment}.json
    • appsettings.json (Tüm ortamlar için genel ayarlar)
    • appsettings.Development.json (Geliştirme ortamı için özel ayarlar)
    • appsettings.Production.json (Üretim ortamı için özel ayarlar)
.ConfigureAppConfiguration((context, config) =>
            {
                var env = context.HostingEnvironment;
                config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
            })