Asp.NET Core Uygulamaları İçin URL Ayarlamanın 7 Yolu
Merhaba,
Malumunuz, Asp.NET Core uygulamalarını geliştirirken lalettayin bir URL kullanamamakta, IPv4 ve IPv6 için loopback adresi eşliğinde http://localhost:5000, http://127.0.0.1:5000 veya http://[::1]:5000 formatlarında url’ler kullanılabilmekte ya da geliştirmenin yapıldığı makinede bulunan belirli bir IP adresi üzerinden de(misal olarak http://192.168.1.12:1453) kullanım söz konusu olabilmektedir. Bunların dışında belirli bir port üzerinden de herhangi bir IP adresi http://*:1461 misali kullanılabilmektedir. Bu kalıpların hangisinin kullanılacağı isteğe bağlı olabilir lakin uygulamada hangi formatın kullanılacağı tarafımızca bildirilmesi gerekmektedir. İşte bu içeriğimizde bunu söylemenin yedi farklı yolunu inceleyeceğiz. O halde buyurun başlayalım…
- UseUrls()
URL ayarlamak için en kolay yöntem UseUrls metodudur diyebiliriz.var builder = WebApplication.CreateBuilder(args); builder.WebHost.UseUrls("http://localhost:1453", "https://localhost:1461"); var app = builder.Build(); app.MapGet("/", () => "Merhaba Dünya..."); app.Run();
Asp.NET Core 1.0 sürümünden beri kullanılan bir yöntemdir.
- WebApplication.Urls & WebApplication.Run()
Bu yöntemde deWebApplication
nesnesi üzerinden uygulama tarafından dinlenecek url’ler belirlenebilmektedir.var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Merhaba Dünya..."); app.Urls.Add("http://localhost:1453"); app.Urls.Add("https://localhost:1461"); app.Run();
Benzer şekilde
WebApplication
nesnesininRun
metodu üzerinden de uygulama url’i belirlenebilmektedir.var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Merhaba Dünya..."); app.Run("https://*:1453");
Tabi
Run
metodu eşliğinde tek bir url’in belirlenebileceğini söylemekte fayda vardır. Bu nedenle birden fazla url’in ayarlanması gereken durumlarda diğer yöntemlere başvurulması gerekmektedir. - URL İçin Environment Variables
Asp.NET Core mimarisinde URL belirlerken genellikle uygulamanın farklı ortamlarda farklı URL’ler kullanabileceği şekilde ayarlanması gerekebilir. URL’leri environment variables olarak ayarlamak, uygulamanın taşınabilirliğini artırabilir ve birden çok ortamda çalışmasını kolaylaştırabilir. Kullanımı aşağıdaki gibi işletim sistemine göre farklılık arz edebilir.Windows işletim sisteminde CMD veya PowerShell için;
setx ASPNETCORE_URLS "http://localhost:1453"
Windows işletim sisteminde PowerShell için;
$Env:ASPNETCORE_URLS="http://localhost:1453"
Unix tabanlı işletim sistemlerin(Linux, macOS vs.) için;
export ASPNETCORE_URLS="http://localhost:1454;https://localhost:1461"
- Command Line Arguments
Asp.NET Core mimarisinin yapılandırma sisteminde url’i belirlemenin bir başka yolu da command line’dan geçmektedir. Şöyle ki;dotnet run -- --urls "http://localhost:1453"
ya da
dotnet run -- --urls "http://*:1453;http://localhost:1461"
Ayrıca aşağıdaki gibi
--http_ports
ve--https_ports
seçenekleri de kullanılabilir.dotnet run -- --http_ports "1453;1461" --https_ports "1915;1921"
- appsettings.json
appsettings.json
ve ortama özgüappsettings.Development.json
veappsettings.Production.json
gibi varyasyonları, Asp.NET Core yapılandırmasında oldukça kolay bir yapılandırma imkanı sağlamaktadır. Aşağıdaki gibi pratik bir şekilde url tanımlaması yapılabilmektedir.{ "urls": "http://*:1453", "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
- launchSettings.json
Asp.NET Core uygulamasını development sürecinde ayağa kaldırırken, önceden tanımlanmış çeşitli url ve port bilgilerinin bulunduğu profiller eşliğinde çalışma yapmamızı sağlayanlaunchSettings.json
dosyası da konumuzun geleneksel çözümünü bizlere sağlıyor diyebiliriz.{ "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:1494", "sslPort": 44397 } }, "profiles": { "http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5173", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "https": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "https://localhost:7036;http://localhost:5173", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
Görüldüğü üzere
profiles
altında tanımlanan profiller; ‘http’, ‘https’ ve ‘IIS Express’ olarak nitelendirilmişlerdir. Bizler ek olarak aşağıdaki gibi kendimize özgü bir profil tanımında bulunabilir ve uygulamayı bu profilin ayarlarında ayağa kaldırabiliriz.{ . . ., "profiles": { . . ., "CustomProfile": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "applicationUrl": "https://localhost:1453;http://localhost:1461", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
Asp.NET Core mimarisinde
launchSettings.json
dosyasının kullanılması için ekstradan bir şey yapılmasına gerek duyulmamakta, uygulama ayağa kaldırılırken dosya otomatik olarak algılanmaktadır. Şöyle ki; uygulamayıdotnet run
komutu ile çalıştırdığınızda uygulama default olarak ‘http’ profili ayarlarında ayağa kaldırılacaktır. Eğer ki var olan profillerden birinde ayağa kaldırmak istiyorsanız
dotnet run --launch-profile "https"
şeklinde talimatın verilmesi gerekmektedir. Ee doğal olarak kendi oluşturduğunuz profilde ayağa kaldırabilmek içinse
dotnet run --launch-profile "CustomProfile"
talimatının verilmesi gerekmektedir.Görüldüğü üzere bu dosya sayesinde environment yapılandırması oldukça kolay ve kullanışlı bir hale getirilmiştir. Tüm bu avantajlarına karşın,
launchSettings.json
dosyasını kullanmaksızın uygulamayı ayağa kaldırmak istiyorsanız
dotnet run --no-launch-profile
talimatını verebilirsiniz. - KestrelServerOptions.Listen()
Şimdiye kadar ele aldığımız tüm yaklaşımlar Kestrel için URL’leri dolaylı olarak ayarlamaktadır. Tüm bunların yerine doğrudan Kestrel üzerinden de url yapılandırmasında bulunabiliriz.using System.Net; var builder = WebApplication.CreateBuilder(args); builder.WebHost.ConfigureKestrel(options => { //-> http://localhost:1453 options.Listen(IPAddress.Loopback, port: 1453); //-> http://*:1461 options.ListenAnyIP(1461); //-> https://localhost:1915 options.ListenLocalhost(1915, listenOptions => listenOptions.UseHttps()); //-> https://*:1921a options.ListenAnyIP(1921, listenOptions => listenOptions.UseHttps()); }); var app = builder.Build(); app.MapGet("/", () => "Merhaba Dünya..."); app.Run();
Kestrel’i yukarıdaki gibi hard-coded bir şekilde yapılandırabileceğimiz gibi
appsettings.json
üzerinden de aşağıdaki gibi yapılandırabiliriz.{ "Kestrel": { "Endpoints": { "HttpLoopback": { "Url": "http://localhost:1453" }, "HttpAny": { "Url": "http://*:1461" }, "HttpsDefaultCert": { "Url": "https://localhost:1915" }, "HttpsInlineCertFile": { "Url": "https://*:1921" } } }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
Böylece uygulamanın yapılandırmasını koddan bağımsız hale getirebilmekteyiz. Ayrıca bu yapılandırma yaklaşımıyla ‘Program.cs’ üzerinden
ConfigureKestrel
metodunu çağırmaya gerekte kalmamaktadır.
Nihai olarak;
Bu içeriğimizde, Asp.NET Core uygulamalarının dinlediği url’leri ayarlayabileceğimiz yedi farklı yolu değerlendirmiş bulunuyoruz. Çalışma hayatında genel olarak development ortamı için launchSettings.json
‘ı kullanıyor olsak da diğer yöntemleri bilmek iş süreçlerinde işinize yarayacaktır kanaatindeyim.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…