Minimal API uygulamalarında WebApplication ve WebApplicationBuilder

WebApplication

Aşağıdaki kod bir ASP.NET Core şablonu tarafından oluşturulur:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Yukarıdaki kod, komut satırında veya Visual Studio'da Boş Web şablonu seçerek oluşturulabilir dotnet new web .

Aşağıdaki kod, açıkça oluşturmadan bir WebApplicationWebApplicationBuilder(app) oluşturur:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create önceden yapılandırılmış varsayılanlarla sınıfının yeni bir örneğini WebApplication başlatır.

WebApplication aşağıdaki ara yazılımı Minimal API applications belirli koşullara bağlı olarak otomatik olarak ekler:

  • UseDeveloperExceptionPage , olduğunda HostingEnvironment"Development"ilk olarak eklenir.
  • UseRouting , kullanıcı kodu henüz çağrılmazsa UseRouting ve örneğin app.MapGetyapılandırılmış uç noktalar varsa eklenir.
  • UseEndpoints , herhangi bir uç nokta yapılandırılırsa ara yazılım işlem hattının sonuna eklenir.
  • UseAuthenticationkullanıcı kodu henüz çağrılmazsa UseAuthentication ve hizmet sağlayıcısında algılanabilirse IAuthenticationSchemeProvider hemen sonra UseRouting eklenir. IAuthenticationSchemeProvider kullanılırken AddAuthenticationvarsayılan olarak eklenir ve kullanılarak hizmetler algılanır IServiceProviderIsService.
  • UseAuthorization , kullanıcı kodu henüz çağrılmazsa UseAuthorization ve hizmet sağlayıcısında algılanabilirse IAuthorizationHandlerProvider eklenir. IAuthorizationHandlerProvider kullanılırken AddAuthorizationvarsayılan olarak eklenir ve kullanılarak hizmetler algılanır IServiceProviderIsService.
  • Kullanıcı tarafından yapılandırılmış ara yazılım ve uç noktalar ile UseEndpointsarasına UseRouting eklenir.

Aşağıdaki kod, uygulamaya eklenen otomatik ara yazılımların etkili bir şekilde ürettiği koddur:

if (isDevelopment)
{
    app.UseDeveloperExceptionPage();
}

app.UseRouting();

if (isAuthenticationConfigured)
{
    app.UseAuthentication();
}

if (isAuthorizationConfigured)
{
    app.UseAuthorization();
}

// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints

app.UseEndpoints(e => {});

Bazı durumlarda, varsayılan ara yazılım yapılandırması uygulama için doğru değildir ve değişiklik gerektirir. Örneğin, UseCors ve UseAuthorizationöncesinde UseAuthentication çağrılmalıdır. Uygulamanın çağrısı UseAuthenticationUseAuthorization ve çağrılıp çağrılmaması UseCors gerekir:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Yol eşleştirme gerçekleşmeden önce ara yazılım çalıştırılmalıdır, UseRouting çağrılmalı ve ara yazılım çağrısından UseRoutingönce yerleştirilmelidir. UseEndpoints daha önce açıklandığı gibi otomatik olarak eklendiğinden bu durumda gerekli değildir:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminal ara yazılımı eklerken:

  • Ara yazılım, sonrasında UseEndpointseklenmelidir.
  • Terminal ara yazılımının doğru konuma yerleştirilebilmesi için uygulamanın araması UseRoutingUseEndpoints gerekir.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

Terminal ara yazılımı, isteği hiçbir uç nokta işlemezse çalışan ara yazılımdır.

Bağlantı noktalarıyla çalışma

Visual Studio veya dotnet newile bir web uygulaması oluşturulduğunda, uygulamanın yanıt verdiği bağlantı noktalarını belirten bir Properties/launchSettings.json dosya oluşturulur. Sonraki bağlantı noktası ayarı örneklerinde, uygulamayı Visual Studio'dan çalıştırmak bir hata iletişim kutusu Unable to connect to web server 'AppName'döndürür. Visual Studio, içinde Properties/launchSettings.jsonbelirtilen bağlantı noktasını beklediğinden ancak uygulama tarafından app.Run("http://localhost:3000")belirtilen bağlantı noktasını kullandığından bir hata döndürür. Komut satırından örnekleri değiştirerek aşağıdaki bağlantı noktasını çalıştırın.

Aşağıdaki bölümlerde uygulamanın yanıt verdiği bağlantı noktası ayarlanır.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Önceki kodda uygulama bağlantı noktasına 3000yanıt verir.

Birden çok bağlantı noktası

Aşağıdaki kodda uygulama ve 4000bağlantı noktasına 3000 yanıt verir.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

Komut satırından bağlantı noktasını ayarlama

Aşağıdaki komut, uygulamanın bağlantı noktasına 7777yanıt vermesini sağlar:

dotnet run --urls="https://localhost:7777"

Kestrel Uç nokta dosyada appsettings.json da yapılandırılmışsa, appsettings.json belirtilen dosya URL'si kullanılır. Daha fazla bilgi için bkz. Kestrel uç nokta yapılandırması

Bağlantı noktasını ortamdan okuma

Aşağıdaki kod, bağlantı noktasını ortamdan okur:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

Bağlantı noktasını ortamdan ayarlamanın tercih edilen yolu, aşağıdaki bölümde gösterilen ortam değişkenini kullanmaktır ASPNETCORE_URLS .

ASPNETCORE_URLS ortam değişkeni aracılığıyla bağlantı noktalarını ayarlama

Ortam ASPNETCORE_URLS değişkeni, bağlantı noktasını ayarlamak için kullanılabilir:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS birden çok URL'leri destekler:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

Ortamı kullanma hakkında daha fazla bilgi için bkz . ASP.NET Core'da birden çok ortam kullanma

Tüm arabirimlerde dinleme

Aşağıdaki örneklerde tüm arabirimlerde dinleme gösterilmektedir

http://*:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://*:3000");

app.MapGet("/", () => "Hello World");

app.Run();

http://+:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://+:3000");

app.MapGet("/", () => "Hello World");

app.Run();

http://0.0.0.0:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://0.0.0.0:3000");

app.MapGet("/", () => "Hello World");

app.Run();

ASPNETCORE_URLS kullanarak tüm arabirimlerde dinleme

Önceki örnekler kullanabilir ASPNETCORE_URLS

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

Geliştirme sertifikası ile HTTPS belirtme

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Geliştirme sertifikası hakkında daha fazla bilgi için bkz . Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme.

Özel sertifika kullanarak HTTPS belirtme

Aşağıdaki bölümlerde, dosyayı kullanarak ve yapılandırma yoluyla özel sertifikanın nasıl belirtileceğini gösterilmektedir appsettings.json .

Ile özel sertifikayı belirtin appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Yapılandırma aracılığıyla özel sertifikayı belirtme

var builder = WebApplication.CreateBuilder(args);

// Configure the cert and the key
builder.Configuration["Kestrel:Certificates:Default:Path"] = "cert.pem";
builder.Configuration["Kestrel:Certificates:Default:KeyPath"] = "key.pem";

var app = builder.Build();

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Sertifika API'lerini kullanma

using System.Security.Cryptography.X509Certificates;

var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel(options =>
{
    options.ConfigureHttpsDefaults(httpsOptions =>
    {
        var certPath = Path.Combine(builder.Environment.ContentRootPath, "cert.pem");
        var keyPath = Path.Combine(builder.Environment.ContentRootPath, "key.pem");

        httpsOptions.ServerCertificate = X509Certificate2.CreateFromPemFile(certPath, 
                                         keyPath);
    });
});

var app = builder.Build();

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Yapılandırma

Aşağıdaki kod yapılandırma sisteminden okunur:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma

Günlük Kaydı

Aşağıdaki kod, oturum açma uygulaması başlatma işlemine bir ileti yazar:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

Daha fazla bilgi için bkz . .NET Core ve ASP.NET Core'da oturum açma

Bağımlılık Ekleme (DI) kapsayıcıya erişme

Aşağıdaki kod, uygulama başlatma sırasında DI kapsayıcısından hizmet almayı gösterir:


var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddScoped<SampleService>();

var app = builder.Build();

app.MapControllers();

using (var scope = app.Services.CreateScope())
{
    var sampleService = scope.ServiceProvider.GetRequiredService<SampleService>();
    sampleService.DoSomething();
}

app.Run();

Daha fazla bilgi için, bkz. ASP.NET Core'de bağımlılık ekleme.

WebApplicationBuilder

Bu bölüm, kullanan WebApplicationBuilderörnek kodu içerir.

İçerik kökünü, uygulama adını ve ortamı değiştirme

Aşağıdaki kod içerik kökünü, uygulama adını ve ortamı ayarlar:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    ApplicationName = typeof(Program).Assembly.FullName,
    ContentRootPath = Directory.GetCurrentDirectory(),
    EnvironmentName = Environments.Staging,
    WebRootPath = "customwwwroot"
});

Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}");
Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}");
Console.WriteLine($"WebRootPath: {builder.Environment.WebRootPath}");

var app = builder.Build();

WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla WebApplicationBuilder sınıfının yeni bir örneğini başlatır.

Daha fazla bilgi için bkz . ASP.NET Temel bilgilere genel bakış

İçerik kökünü, uygulama adını ve ortamı ortam değişkenlerine veya komut satırına göre değiştirme

Aşağıdaki tabloda içerik kökünü, uygulama adını ve ortamı değiştirmek için kullanılan ortam değişkeni ve komut satırı bağımsız değişkeni gösterilmektedir:

özelliği Ortam değişkeni Komut satırı bağımsız değişkeni
Uygulama adı ASPNETCORE_APPLICATIONNAME --Applicationname
Ortam adı ASPNETCORE_ENVIRONMENT --Ortam
İçerik kökü ASPNETCORE_CONTENTROOT --contentRoot

Yapılandırma sağlayıcıları ekleme

Aşağıdaki örnek INI yapılandırma sağlayıcısını ekler:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Ayrıntılı bilgi için bkz. ASP.NET Core'da Yapılandırma bölümünde dosya yapılandırma sağlayıcıları.

Yapılandırmayı okuma

Varsayılan olarak WebApplicationBuilder , yapılandırmayı aşağıdakiler dahil olmak üzere birden çok kaynaktan okur:

  • appSettings.json ve appSettings.{environment}.json
  • Ortam değişkenleri
  • Komut satırı

Aşağıdaki kod yapılandırmadan okur HelloKey ve değeri uç noktada görüntüler / . Yapılandırma değeri null ise , "Hello" öğesine messageatanır:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

Okunan yapılandırma kaynaklarının tam listesi için bkz. ASP.NET Core'da Yapılandırma'da varsayılan yapılandırma

Günlük sağlayıcıları ekleme

var builder = WebApplication.CreateBuilder(args);

// Configure JSON logging to the console.
builder.Logging.AddJsonConsole();

var app = builder.Build();

app.MapGet("/", () => "Hello JSON console!");

app.Run();

Hizmet ekleme

var builder = WebApplication.CreateBuilder(args);

// Add the memory cache services.
builder.Services.AddMemoryCache();

// Add a custom scoped service.
builder.Services.AddScoped<ITodoRepository, TodoRepository>();
var app = builder.Build();

IHostBuilder'i özelleştirme

üzerindeki IHostBuilder mevcut uzantı yöntemlerine Host özelliği kullanılarak erişilebilir:

var builder = WebApplication.CreateBuilder(args);

// Wait 30 seconds for graceful shutdown.
builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

IWebHostBuilder'i özelleştirme

üzerindeki IWebHostBuilder uzantı yöntemlerine WebApplicationBuilder.WebHost özelliği kullanılarak erişilebilir.

var builder = WebApplication.CreateBuilder(args);

// Change the HTTP server implemenation to be HTTP.sys based
builder.WebHost.UseHttpSys();

var app = builder.Build();

app.MapGet("/", () => "Hello HTTP.sys");

app.Run();

Web kökünü değiştirme

Varsayılan olarak, web kökü klasördeki içerik köküne wwwroot göredir. Web kökü, statik dosyalar ara yazılımının statik dosyaları ara yazılımının ara yazılım tarafından arandığı yerdir. Web kökü ile, komut satırıyla WebHostOptionsveya yöntemiyle UseWebRoot değiştirilebilir:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Özel bağımlılık ekleme (DI) kapsayıcısı

Aşağıdaki örnekte Autofac kullanılır:

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));

var app = builder.Build();

Ara Yazılım Ekle

Mevcut ASP.NET Core ara yazılımları üzerinde WebApplicationyapılandırılabilir:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

Daha fazla bilgi için bkz . ASP.NET Core Ara Yazılımı

Geliştirici özel durum sayfası

WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla sınıfının yeni bir örneğini WebApplicationBuilder başlatır. Geliştirici özel durum sayfası önceden yapılandırılmış varsayılanlarda etkinleştirilir. Geliştirme ortamında aşağıdaki kod çalıştırıldığında, öğesine / gitmek özel durumu gösteren kolay bir sayfa oluşturur.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();

WebApplication

Aşağıdaki kod bir ASP.NET Core şablonu tarafından oluşturulur:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Yukarıdaki kod, komut satırında veya Visual Studio'da Boş Web şablonu seçerek oluşturulabilir dotnet new web .

Aşağıdaki kod, açıkça oluşturmadan bir WebApplicationWebApplicationBuilder(app) oluşturur:

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run();

WebApplication.Create önceden yapılandırılmış varsayılanlarla sınıfının yeni bir örneğini WebApplication başlatır.

WebApplication aşağıdaki ara yazılımı Minimal API applications belirli koşullara bağlı olarak otomatik olarak ekler:

  • UseDeveloperExceptionPage , olduğunda HostingEnvironment"Development"ilk olarak eklenir.
  • UseRouting , kullanıcı kodu henüz çağrılmazsa UseRouting ve örneğin app.MapGetyapılandırılmış uç noktalar varsa eklenir.
  • UseEndpoints , herhangi bir uç nokta yapılandırılırsa ara yazılım işlem hattının sonuna eklenir.
  • UseAuthenticationkullanıcı kodu henüz çağrılmazsa UseAuthentication ve hizmet sağlayıcısında algılanabilirse IAuthenticationSchemeProvider hemen sonra UseRouting eklenir. IAuthenticationSchemeProvider kullanılırken AddAuthenticationvarsayılan olarak eklenir ve kullanılarak hizmetler algılanır IServiceProviderIsService.
  • UseAuthorization , kullanıcı kodu henüz çağrılmazsa UseAuthorization ve hizmet sağlayıcısında algılanabilirse IAuthorizationHandlerProvider eklenir. IAuthorizationHandlerProvider kullanılırken AddAuthorizationvarsayılan olarak eklenir ve kullanılarak hizmetler algılanır IServiceProviderIsService.
  • Kullanıcı tarafından yapılandırılmış ara yazılım ve uç noktalar ile UseEndpointsarasına UseRouting eklenir.

Aşağıdaki kod, uygulamaya eklenen otomatik ara yazılımların etkili bir şekilde ürettiği koddur:

if (isDevelopment)
{
    app.UseDeveloperExceptionPage();
}

app.UseRouting();

if (isAuthenticationConfigured)
{
    app.UseAuthentication();
}

if (isAuthorizationConfigured)
{
    app.UseAuthorization();
}

// user middleware/endpoints
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// end user middleware/endpoints

app.UseEndpoints(e => {});

Bazı durumlarda, varsayılan ara yazılım yapılandırması uygulama için doğru değildir ve değişiklik gerektirir. Örneğin, UseCors ve UseAuthorizationöncesinde UseAuthentication çağrılmalıdır. Uygulamanın çağrısı UseAuthenticationUseAuthorization ve çağrılıp çağrılmaması UseCors gerekir:

app.UseCors();
app.UseAuthentication();
app.UseAuthorization();

Yol eşleştirme gerçekleşmeden önce ara yazılım çalıştırılmalıdır, UseRouting çağrılmalı ve ara yazılım çağrısından UseRoutingönce yerleştirilmelidir. UseEndpoints daha önce açıklandığı gibi otomatik olarak eklendiğinden bu durumda gerekli değildir:

app.Use((context, next) =>
{
    return next(context);
});

app.UseRouting();

// other middleware and endpoints

Terminal ara yazılımı eklerken:

  • Ara yazılım, sonrasında UseEndpointseklenmelidir.
  • Terminal ara yazılımının doğru konuma yerleştirilebilmesi için uygulamanın araması UseRoutingUseEndpoints gerekir.
app.UseRouting();

app.MapGet("/", () => "hello world");

app.UseEndpoints(e => {});

app.Run(context =>
{
    context.Response.StatusCode = 404;
    return Task.CompletedTask;
});

Terminal ara yazılımı, isteği hiçbir uç nokta işlemezse çalışan ara yazılımdır.

Bağlantı noktalarıyla çalışma

Visual Studio veya dotnet newile bir web uygulaması oluşturulduğunda, uygulamanın yanıt verdiği bağlantı noktalarını belirten bir Properties/launchSettings.json dosya oluşturulur. Sonraki bağlantı noktası ayarı örneklerinde, uygulamayı Visual Studio'dan çalıştırmak bir hata iletişim kutusu Unable to connect to web server 'AppName'döndürür. Visual Studio, içinde Properties/launchSettings.jsonbelirtilen bağlantı noktasını beklediğinden ancak uygulama tarafından app.Run("http://localhost:3000")belirtilen bağlantı noktasını kullandığından bir hata döndürür. Komut satırından örnekleri değiştirerek aşağıdaki bağlantı noktasını çalıştırın.

Aşağıdaki bölümlerde uygulamanın yanıt verdiği bağlantı noktası ayarlanır.

var app = WebApplication.Create(args);

app.MapGet("/", () => "Hello World!");

app.Run("http://localhost:3000");

Önceki kodda uygulama bağlantı noktasına 3000yanıt verir.

Birden çok bağlantı noktası

Aşağıdaki kodda uygulama ve 4000bağlantı noktasına 3000 yanıt verir.

var app = WebApplication.Create(args);

app.Urls.Add("http://localhost:3000");
app.Urls.Add("http://localhost:4000");

app.MapGet("/", () => "Hello World");

app.Run();

Komut satırından bağlantı noktasını ayarlama

Aşağıdaki komut, uygulamanın bağlantı noktasına 7777yanıt vermesini sağlar:

dotnet run --urls="https://localhost:7777"

Kestrel Uç nokta dosyada appsettings.json da yapılandırılmışsa, appsettings.json belirtilen dosya URL'si kullanılır. Daha fazla bilgi için bkz. Kestrel uç nokta yapılandırması

Bağlantı noktasını ortamdan okuma

Aşağıdaki kod, bağlantı noktasını ortamdan okur:

var app = WebApplication.Create(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "3000";

app.MapGet("/", () => "Hello World");

app.Run($"http://localhost:{port}");

Bağlantı noktasını ortamdan ayarlamanın tercih edilen yolu, aşağıdaki bölümde gösterilen ortam değişkenini kullanmaktır ASPNETCORE_URLS .

ASPNETCORE_URLS ortam değişkeni aracılığıyla bağlantı noktalarını ayarlama

Ortam ASPNETCORE_URLS değişkeni, bağlantı noktasını ayarlamak için kullanılabilir:

ASPNETCORE_URLS=http://localhost:3000

ASPNETCORE_URLS birden çok URL'leri destekler:

ASPNETCORE_URLS=http://localhost:3000;https://localhost:5000

Tüm arabirimlerde dinleme

Aşağıdaki örneklerde tüm arabirimlerde dinleme gösterilmektedir

http://*:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://*:3000");

app.MapGet("/", () => "Hello World");

app.Run();

http://+:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://+:3000");

app.MapGet("/", () => "Hello World");

app.Run();

http://0.0.0.0:3000

var app = WebApplication.Create(args);

app.Urls.Add("http://0.0.0.0:3000");

app.MapGet("/", () => "Hello World");

app.Run();

ASPNETCORE_URLS kullanarak tüm arabirimlerde dinleme

Önceki örnekler kullanabilir ASPNETCORE_URLS

ASPNETCORE_URLS=http://*:3000;https://+:5000;http://0.0.0.0:5005

ASPNETCORE_HTTPS_PORTS kullanarak tüm arabirimleri dinleme

Yukarıdaki örnekler ve ASPNETCORE_HTTP_PORTSkullanabilirASPNETCORE_HTTPS_PORTS.

ASPNETCORE_HTTP_PORTS=3000;5005
ASPNETCORE_HTTPS_PORTS=5000

Daha fazla bilgi için bkz . ASP.NET Core Kestrel web sunucusu için uç noktaları yapılandırma

Geliştirme sertifikası ile HTTPS belirtme

var app = WebApplication.Create(args);

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Geliştirme sertifikası hakkında daha fazla bilgi için bkz . Windows ve macOS'ta ASP.NET Core HTTPS geliştirme sertifikasına güvenme.

Özel sertifika kullanarak HTTPS belirtme

Aşağıdaki bölümlerde, dosyayı kullanarak ve yapılandırma yoluyla özel sertifikanın nasıl belirtileceğini gösterilmektedir appsettings.json .

Ile özel sertifikayı belirtin appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "cert.pem",
        "KeyPath": "key.pem"
      }
    }
  }
}

Yapılandırma aracılığıyla özel sertifikayı belirtme

var builder = WebApplication.CreateBuilder(args);

// Configure the cert and the key
builder.Configuration["Kestrel:Certificates:Default:Path"] = "cert.pem";
builder.Configuration["Kestrel:Certificates:Default:KeyPath"] = "key.pem";

var app = builder.Build();

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Sertifika API'lerini kullanma

using System.Security.Cryptography.X509Certificates;

var builder = WebApplication.CreateBuilder(args);

builder.WebHost.ConfigureKestrel(options =>
{
    options.ConfigureHttpsDefaults(httpsOptions =>
    {
        var certPath = Path.Combine(builder.Environment.ContentRootPath, "cert.pem");
        var keyPath = Path.Combine(builder.Environment.ContentRootPath, "key.pem");

        httpsOptions.ServerCertificate = X509Certificate2.CreateFromPemFile(certPath, 
                                         keyPath);
    });
});

var app = builder.Build();

app.Urls.Add("https://localhost:3000");

app.MapGet("/", () => "Hello World");

app.Run();

Ortamı okuma

var app = WebApplication.Create(args);

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/oops");
}

app.MapGet("/", () => "Hello World");
app.MapGet("/oops", () => "Oops! An error happened.");

app.Run();

Ortamı kullanma hakkında daha fazla bilgi için bkz . ASP.NET Core'da birden çok ortam kullanma

Yapılandırma

Aşağıdaki kod yapılandırma sisteminden okunur:

var app = WebApplication.Create(args);

var message = app.Configuration["HelloKey"] ?? "Config failed!";

app.MapGet("/", () => message);

app.Run();

Daha fazla bilgi için bkz . ASP.NET Core'da yapılandırma

Günlük Kaydı

Aşağıdaki kod, oturum açma uygulaması başlatma işlemine bir ileti yazar:

var app = WebApplication.Create(args);

app.Logger.LogInformation("The app started");

app.MapGet("/", () => "Hello World");

app.Run();

Daha fazla bilgi için bkz . .NET Core ve ASP.NET Core'da oturum açma

Bağımlılık Ekleme (DI) kapsayıcıya erişme

Aşağıdaki kod, uygulama başlatma sırasında DI kapsayıcısından hizmet almayı gösterir:


var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddScoped<SampleService>();

var app = builder.Build();

app.MapControllers();

using (var scope = app.Services.CreateScope())
{
    var sampleService = scope.ServiceProvider.GetRequiredService<SampleService>();
    sampleService.DoSomething();
}

app.Run();

Aşağıdaki kod, özniteliğini kullanarak DI kapsayıcısından anahtarlara erişmeyi [FromKeyedServices] gösterir:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddKeyedSingleton<ICache, BigCache>("big");
builder.Services.AddKeyedSingleton<ICache, SmallCache>("small");

var app = builder.Build();

app.MapGet("/big", ([FromKeyedServices("big")] ICache bigCache) => bigCache.Get("date"));

app.MapGet("/small", ([FromKeyedServices("small")] ICache smallCache) => smallCache.Get("date"));

app.Run();

public interface ICache
{
    object Get(string key);
}
public class BigCache : ICache
{
    public object Get(string key) => $"Resolving {key} from big cache.";
}

public class SmallCache : ICache
{
    public object Get(string key) => $"Resolving {key} from small cache.";
}

DI hakkında daha fazla bilgi için bkz . ASP.NET Core'da bağımlılık ekleme.

WebApplicationBuilder

Bu bölüm, kullanan WebApplicationBuilderörnek kodu içerir.

İçerik kökünü, uygulama adını ve ortamı değiştirme

Aşağıdaki kod içerik kökünü, uygulama adını ve ortamı ayarlar:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    ApplicationName = typeof(Program).Assembly.FullName,
    ContentRootPath = Directory.GetCurrentDirectory(),
    EnvironmentName = Environments.Staging,
    WebRootPath = "customwwwroot"
});

Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}");
Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}");
Console.WriteLine($"WebRootPath: {builder.Environment.WebRootPath}");

var app = builder.Build();

WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla WebApplicationBuilder sınıfının yeni bir örneğini başlatır.

Daha fazla bilgi için bkz . ASP.NET Temel bilgilere genel bakış

Ortam değişkenlerini veya komut satırını kullanarak içerik kökünü, uygulama adını ve ortamı değiştirme

Aşağıdaki tabloda içerik kökünü, uygulama adını ve ortamı değiştirmek için kullanılan ortam değişkeni ve komut satırı bağımsız değişkeni gösterilmektedir:

özelliği Ortam değişkeni Komut satırı bağımsız değişkeni
Uygulama adı ASPNETCORE_APPLICATIONNAME --Applicationname
Ortam adı ASPNETCORE_ENVIRONMENT --Ortam
İçerik kökü ASPNETCORE_CONTENTROOT --contentRoot

Yapılandırma sağlayıcıları ekleme

Aşağıdaki örnek INI yapılandırma sağlayıcısını ekler:

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddIniFile("appsettings.ini");

var app = builder.Build();

Ayrıntılı bilgi için bkz. ASP.NET Core'da Yapılandırma bölümünde dosya yapılandırma sağlayıcıları.

Yapılandırmayı okuma

Varsayılan olarak WebApplicationBuilder , yapılandırmayı aşağıdakiler dahil olmak üzere birden çok kaynaktan okur:

  • appSettings.json ve appSettings.{environment}.json
  • Ortam değişkenleri
  • Komut satırı

Yapılandırma kaynaklarının tam listesi için bkz. ASP.NET Core'da Yapılandırma'da varsayılan yapılandırma.

Aşağıdaki kod yapılandırmadan okur HelloKey ve değeri uç noktada görüntüler / . Yapılandırma değeri null ise , "Hello" öğesine messageatanır:

var builder = WebApplication.CreateBuilder(args);

var message = builder.Configuration["HelloKey"] ?? "Hello";

var app = builder.Build();

app.MapGet("/", () => message);

app.Run();

Ortamı okuma

var builder = WebApplication.CreateBuilder(args);

if (builder.Environment.IsDevelopment())
{
    Console.WriteLine($"Running in development.");
}

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Günlük sağlayıcıları ekleme

var builder = WebApplication.CreateBuilder(args);

// Configure JSON logging to the console.
builder.Logging.AddJsonConsole();

var app = builder.Build();

app.MapGet("/", () => "Hello JSON console!");

app.Run();

Hizmet ekleme

var builder = WebApplication.CreateBuilder(args);

// Add the memory cache services.
builder.Services.AddMemoryCache();

// Add a custom scoped service.
builder.Services.AddScoped<ITodoRepository, TodoRepository>();
var app = builder.Build();

IHostBuilder'i özelleştirme

üzerindeki IHostBuilder mevcut uzantı yöntemlerine Host özelliği kullanılarak erişilebilir:

var builder = WebApplication.CreateBuilder(args);

// Wait 30 seconds for graceful shutdown.
builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

IWebHostBuilder'i özelleştirme

üzerindeki IWebHostBuilder uzantı yöntemlerine WebApplicationBuilder.WebHost özelliği kullanılarak erişilebilir.

var builder = WebApplication.CreateBuilder(args);

// Change the HTTP server implemenation to be HTTP.sys based
builder.WebHost.UseHttpSys();

var app = builder.Build();

app.MapGet("/", () => "Hello HTTP.sys");

app.Run();

Web kökünü değiştirme

Varsayılan olarak, web kökü klasördeki içerik köküne wwwroot göredir. Web kökü, statik dosyalar ara yazılımının statik dosyaları ara yazılımının ara yazılım tarafından arandığı yerdir. Web kökü ile, komut satırıyla WebHostOptionsveya yöntemiyle UseWebRoot değiştirilebilir:

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    Args = args,
    // Look for static files in webroot
    WebRootPath = "webroot"
});

var app = builder.Build();

app.Run();

Özel bağımlılık ekleme (DI) kapsayıcısı

Aşağıdaki örnekte Autofac kullanılır:

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());

// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));

var app = builder.Build();

Ara Yazılım Ekle

Mevcut ASP.NET Core ara yazılımları üzerinde WebApplicationyapılandırılabilir:

var app = WebApplication.Create(args);

// Setup the file server to serve static files.
app.UseFileServer();

app.MapGet("/", () => "Hello World!");

app.Run();

Daha fazla bilgi için bkz . ASP.NET Core Ara Yazılımı

Geliştirici özel durum sayfası

WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla sınıfının yeni bir örneğini WebApplicationBuilder başlatır. Geliştirici özel durum sayfası önceden yapılandırılmış varsayılanlarda etkinleştirilir. Geliştirme ortamında aşağıdaki kod çalıştırıldığında, öğesine / gitmek özel durumu gösteren kolay bir sayfa oluşturur.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () =>
{
    throw new InvalidOperationException("Oops, the '/' route has thrown an exception.");
});

app.Run();