Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

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…

  1. 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.

  2. WebApplication.Urls & WebApplication.Run()
    Bu yöntemde de WebApplication 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 nesnesinin Run 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.

  3. 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"
    
  4. 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"
    
  5. appsettings.json
    appsettings.json ve ortama özgü appsettings.Development.json ve appsettings.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": "*"
    }
    
  6. 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ğlayan launchSettings.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.

  7. 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…

Bunlar da hoşunuza gidebilir...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir