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:
- 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.
- 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.
- 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.
- 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)
- 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.
- Gizli Bilgileri Çevre Değişkenleri ile Yönetin: Örneğin, veritabanı bağlantı bilgilerini
appsettings.json
yerine ortam değişkenlerinde tutabilirsiniz. - Ortam Ayarlarını Farklı Dosyalarda Tutun: ASP.NET Core,
appsettings.{Environment}.json
dosyalarını destekler. - 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}.jsonappsettings.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);
})