Host Generik .NET di ASP.NET Core

Artikel ini menyediakan informasi tentang menggunakan Host Generik .NET di ASP.NET Core.

Templat ASP.NET Core membuat WebApplicationBuilder dan WebApplication, yang menyediakan cara yang efisien untuk mengonfigurasi dan menjalankan aplikasi web tanpa Startup kelas. Untuk informasi selengkapnya tentang WebApplicationBuilder dan WebApplication, lihat Migrasi dari ASP.NET Core 5.0 ke 6.0.

Untuk informasi tentang menggunakan Host Generik .NET di aplikasi konsol, lihat Host Generik .NET.

Definisi host

Host adalah objek yang merangkum sumber daya aplikasi, seperti:

  • Injeksi dependensi (DI)
  • Pengelogan
  • Konfigurasi
  • Implementasi IHostedService

Saat dimulai, host memanggil IHostedService.StartAsync pada setiap implementasi IHostedService yang terdaftar dalam kumpulan layanan yang dihosting kontainer layanan. Dalam aplikasi web, salah IHostedService satu implementasinya adalah layanan web yang memulai implementasi server HTTP.

Menyertakan semua sumber daya aplikasi yang saling diperlukan dalam satu objek memungkinkan kontrol atas pengaktifan aplikasi dan mematikan dengan baik.

Menyiapkan host

Host biasanya dikonfigurasi, dibangun, dan dijalankan oleh kode di Program.cs. Kode berikut membuat host dengan implementasi yang IHostedService ditambahkan ke kontainer DI:

await Host.CreateDefaultBuilder(args)
    .ConfigureServices(services =>
    {
        services.AddHostedService<SampleHostedService>();
    })
    .Build()
    .RunAsync();

Untuk beban kerja HTTP, panggil ConfigureWebHostDefaults setelah CreateDefaultBuilder:

await Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    })
    .Build()
    .RunAsync();

Pengaturan penyusun default

Metode CreateDefaultBuilder:

  • Mengatur akar konten ke jalur yang dikembalikan oleh GetCurrentDirectory.
  • Memuat konfigurasi host dari:
    • Variabel lingkungan yang diawali dengan DOTNET_.
    • Argumen baris perintah.
  • Memuat konfigurasi aplikasi dari:
    • appsettings.json.
    • appsettings.{Environment}.json.
    • Rahasia pengguna saat aplikasi berjalan di Development lingkungan.
    • Variabel lingkungan.
    • Argumen baris perintah.
  • Menambahkan penyedia pengelogan berikut:
    • Konsol
    • Debug
    • EventSource
    • EventLog (hanya saat menjalankan di Windows)
  • Mengaktifkan validasi cakupan dan validasi dependensi saat lingkungan adalah Pengembangan.

Metode ConfigureWebHostDefaults:

Bagian Pengaturan untuk semua jenis aplikasi dan Pengaturan untuk aplikasi web nanti di artikel ini memperlihatkan cara mengganti pengaturan penyusun default.

Layanan yang disediakan kerangka kerja

Layanan berikut terdaftar secara otomatis:

Untuk informasi selengkapnya tentang layanan yang disediakan kerangka kerja, lihat Injeksi dependensi di ASP.NET Core.

IHostApplicationLifetime

IHostApplicationLifetime Masukkan layanan (sebelumnyaIApplicationLifetime) ke kelas mana pun untuk menangani tugas pasca-startup dan matikan dengan baik. Tiga properti pada antarmuka adalah token pembatalan yang digunakan untuk mendaftarkan metode penanganan aktivitas mulai aplikasi dan penghentian aplikasi. Antarmuka juga menyertakan StopApplication metode , yang memungkinkan aplikasi untuk meminta pematian yang baik.

Saat melakukan pematian dengan baik, host:

  • Memicu penanganan ApplicationStopping aktivitas, yang memungkinkan aplikasi menjalankan logika sebelum proses pematian dimulai.
  • Menghentikan server, yang menonaktifkan koneksi baru. Server menunggu permintaan pada koneksi yang ada selesai, selama batas waktu mati memungkinkan. Server mengirimkan header tutup koneksi untuk permintaan lebih lanjut pada koneksi yang ada.
  • Memicu penanganan ApplicationStopped aktivitas, yang memungkinkan aplikasi menjalankan logika setelah aplikasi dimatikan.

Contoh berikut adalah IHostedService implementasi yang mendaftarkan IHostApplicationLifetime penanganan aktivitas:

public class HostApplicationLifetimeEventsHostedService : IHostedService
{
    private readonly IHostApplicationLifetime _hostApplicationLifetime;

    public HostApplicationLifetimeEventsHostedService(
        IHostApplicationLifetime hostApplicationLifetime)
        => _hostApplicationLifetime = hostApplicationLifetime;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _hostApplicationLifetime.ApplicationStarted.Register(OnStarted);
        _hostApplicationLifetime.ApplicationStopping.Register(OnStopping);
        _hostApplicationLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
        => Task.CompletedTask;

    private void OnStarted()
    {
        // ...
    }

    private void OnStopping()
    {
        // ...
    }

    private void OnStopped()
    {
        // ...
    }
}

IHostLifetime

Implementasi IHostLifetime mengontrol waktu host dimulai dan dihentikan. Implementasi terakhir yang terdaftar akan digunakan.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime adalah implementasi IHostLifetime default. ConsoleLifetime:

IHostEnvironment

Injeksikan layanan IHostEnvironment ke dalam kelas untuk mendapatkan informasi tentang pengaturan berikut:

Aplikasi web mengimplementasikan IWebHostEnvironment antarmuka, yang mewarisi IHostEnvironment dan menambahkan WebRootPath.

Konfigurasi host

Konfigurasi host digunakan untuk properti IHostEnvironment implementasi.

Konfigurasi host tersedia dari HostBuilderContext.Configuration dalam ConfigureAppConfiguration. Setelah ConfigureAppConfiguration, HostBuilderContext.Configuration diganti dengan konfigurasi aplikasi.

Untuk menambahkan konfigurasi host, panggil ConfigureHostConfiguration di IHostBuilder. ConfigureHostConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Host menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Penyedia variabel lingkungan dengan awalan DOTNET_ dan argumen baris perintah disertakan oleh CreateDefaultBuilder. Untuk aplikasi web, penyedia variabel lingkungan dengan awalan ASPNETCORE_ ditambahkan. Awalan dihapus saat variabel lingkungan dibaca. Misalnya, nilai variabel lingkungan untuk ASPNETCORE_ENVIRONMENT menjadi nilai konfigurasi host untuk environment kunci.

Contoh berikut membuat konfigurasi host:

Host.CreateDefaultBuilder(args)
    .ConfigureHostConfiguration(hostConfig =>
    {
        hostConfig.SetBasePath(Directory.GetCurrentDirectory());
        hostConfig.AddJsonFile("hostsettings.json", optional: true);
        hostConfig.AddEnvironmentVariables(prefix: "PREFIX_");
        hostConfig.AddCommandLine(args);
    });

Konfigurasi aplikasi

Konfigurasi aplikasi dibuat dengan memanggil ConfigureAppConfiguration di IHostBuilder. ConfigureAppConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Aplikasi ini menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Konfigurasi yang dibuat oleh ConfigureAppConfiguration tersedia di HostBuilderContext.Configuration untuk operasi berikutnya dan sebagai layanan dari DI. Konfigurasi host juga ditambahkan ke konfigurasi aplikasi.

Untuk informasi selengkapnya, lihat Konfigurasi di ASP.NET Core.

Pengaturan untuk semua jenis aplikasi

Bagian ini mencantumkan pengaturan host yang berlaku untuk beban kerja HTTP dan non-HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ , yang muncul dalam daftar pengaturan berikut sebagai {PREFIX_} tempat penampung. Untuk informasi selengkapnya, lihat bagian Pengaturan penyusun default dan Konfigurasi: Variabel lingkungan.

ApplicationName

Properti IHostEnvironment.ApplicationName diatur dari konfigurasi host selama konstruksi host.

Kunci: applicationName
Jenis: string
Default: Nama assembly yang berisi titik masuk aplikasi.
Variabel lingkungan: {PREFIX_}APPLICATIONNAME

Untuk mengatur nilai ini, gunakan variabel lingkungan.

ContentRoot

Properti IHostEnvironment.ContentRootPath menentukan di mana host mulai mencari file konten. Jika jalur tidak ada, host gagal memulai.

Kunci: contentRoot
Jenis: string
Default: Folder tempat assembly aplikasi berada.
Variabel lingkungan: {PREFIX_}CONTENTROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseContentRoot pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseContentRoot("/path/to/content/root")
    // ...

Untuk informasi selengkapnya, lihat:

EnvironmentName

Properti IHostEnvironment.EnvironmentName dapat diatur ke nilai apa pun. Nilai yang ditentukan kerangka kerja meliputi Development, , Stagingdan Production. Nilai tidak peka huruf besar/kecil.

Kunci: environment
Jenis: string
Default: Production
Variabel lingkungan: {PREFIX_}ENVIRONMENT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseEnvironment pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    // ...

ShutdownTimeout

HostOptions.ShutdownTimeout mengatur batas waktu untuk StopAsync. Nilai defaultnya adalah lima detik. Selama periode batas waktu, host:

Jika periode batas waktu berakhir sebelum semua layanan yang dihosting berhenti, layanan aktif yang tersisa akan dihentikan saat aplikasi dimatikan. Layanan berhenti meskipun belum selesai diproses. Jika layanan memerlukan lebih banyak waktu untuk berhenti, tingkatkan batas waktu.

Kunci: shutdownTimeoutSeconds
Jenis: int
Default: 5 detik
Variabel lingkungan: {PREFIX_}SHUTDOWNTIMEOUTSECONDS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau konfigurasikan HostOptions. Contoh berikut mengatur batas waktu menjadi 20 detik:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(options =>
        {
            options.ShutdownTimeout = TimeSpan.FromSeconds(20);
        });
    });

Menonaktifkan muatan ulang konfigurasi aplikasi saat perubahan

Secara default, appsettings.json dan appsettings.{Environment}.json dimuat ulang saat file berubah. Untuk menonaktifkan perilaku muat ulang ini di ASP.NET Core 5.0 atau yang lebih baru, atur kunci ke hostBuilder:reloadConfigOnChangefalse.

Kunci: hostBuilder:reloadConfigOnChange
Jenis: bool (true atau false)
Default: true
Argumen baris perintah: hostBuilder:reloadConfigOnChange
Variabel lingkungan: {PREFIX_}hostBuilder:reloadConfigOnChange

Peringatan

Pemisah titik dua (:) tidak berfungsi dengan kunci hierarki variabel lingkungan di semua platform. Untuk informasi selengkapnya, lihat Variabel lingkungan.

Pengaturan untuk aplikasi web

Beberapa pengaturan host hanya berlaku untuk beban kerja HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ , yang muncul dalam daftar pengaturan berikut sebagai {PREFIX_} tempat penampung.

Metode ekstensi pada IWebHostBuilder tersedia untuk pengaturan ini. Sampel kode yang menunjukkan cara memanggil metode ekstensi mengasumsikan webBuilder adalah instans , IWebHostBuilderseperti dalam contoh berikut:

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        // ...
    });

CaptureStartupErrors

Ketika false, kesalahan selama startup mengakibatkan host keluar. Ketika true, host menangkap pengecualian selama startup dan mencoba memulai server.

Kunci: captureStartupErrors
Jenis: bool (true/1 atau false/0)
Default: Default ke false kecuali aplikasi berjalan dengan Kestrel di belakang IIS, di mana defaultnya adalah true.
Variabel lingkungan: {PREFIX_}CAPTURESTARTUPERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggil CaptureStartupErrors:

webBuilder.CaptureStartupErrors(true);

DetailedErrors

Saat diaktifkan, atau saat lingkungan adalah Development, aplikasi menangkap kesalahan terperinci.

Kunci: detailedErrors
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}DETAILEDERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggil UseSetting:

webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");

HostingStartupAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dimuat saat startup. Meskipun nilai konfigurasi default ke string kosong, rakitan startup hosting selalu menyertakan assembly aplikasi. Saat menghosting rakitan startup disediakan, mereka ditambahkan ke assembly aplikasi untuk dimuat saat aplikasi membangun layanan umumnya selama startup.

Kunci: hostingStartupAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggil UseSetting:

webBuilder.UseSetting(
    WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");

HostingStartupExcludeAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dikecualikan saat startup.

Kunci: hostingStartupExcludeAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggil UseSetting:

webBuilder.UseSetting(
    WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");

HTTPS_Port

Port pengalihan HTTPS. Digunakan dalam memberlakukan HTTPS.

Kunci: https_port
Jenis: string
Default: Nilai default tidak diatur.
Variabel lingkungan: {PREFIX_}HTTPS_PORT

Untuk mengatur nilai ini, gunakan konfigurasi atau panggil UseSetting:

webBuilder.UseSetting("https_port", "8080");

PreferHostingUrls

Menunjukkan apakah host harus mendengarkan URL yang dikonfigurasi dengan IWebHostBuilder alih-alih URL yang dikonfigurasi dengan IServer implementasi.

Kunci: preferHostingUrls
Jenis: bool (true/1 atau false/0)
Default: true
Variabel lingkungan: {PREFIX_}PREFERHOSTINGURLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil PreferHostingUrls:

webBuilder.PreferHostingUrls(true);

PreventHostingStartup

Mencegah pemuatan otomatis rakitan startup hosting, termasuk rakitan startup hosting yang dikonfigurasi oleh rakitan aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Kunci: preventHostingStartup
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}PREVENTHOSTINGSTARTUP

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseSetting :

webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");

StartupAssembly

Perakitan untuk Startup mencari kelas .

Kunci: startupAssembly
Jenis: string
Default: Rakitan aplikasi
Variabel lingkungan: {PREFIX_}STARTUPASSEMBLY

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseStartup. UseStartup dapat mengambil nama rakitan (string) atau jenis (TStartup). Jika beberapa UseStartup metode dipanggil, metode terakhir lebih diutamakan.

webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();

SuppressStatusMessages

Saat diaktifkan, menekan pesan status startup hosting.

Kunci: suppressStatusMessages
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}SUPPRESSSTATUSMESSAGES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");

URL

Daftar alamat IP atau alamat host yang dibatasi titik koma dengan port dan protokol yang harus didengarkan server untuk permintaan. Contohnya:http://localhost:123 Gunakan "*" untuk menunjukkan bahwa server harus mendengarkan permintaan pada alamat IP atau nama host apa pun menggunakan port dan protokol yang ditentukan (misalnya, http://*:5000). Protokol (http:// atau https://) harus disertakan dengan setiap URL. Format yang didukung bervariasi di antara server.

Kunci: urls
Jenis: string
Default: http://localhost:5000 dan https://localhost:5001
Variabel lingkungan: {PREFIX_}URLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseUrls:

webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

Kestrel memiliki API konfigurasi titik akhirnya sendiri. Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk server web ASP.NET CoreKestrel.

Webroot

Properti IWebHostEnvironment.WebRootPath menentukan jalur relatif ke aset statis aplikasi. Jika jalur tidak ada, penyedia file tanpa operasi akan digunakan.

Kunci: webroot
Jenis: string
Default: Defaultnya adalah wwwroot. Jalur ke {content root}/wwwroot harus ada.
Variabel lingkungan: {PREFIX_}WEBROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseWebRoot pada IWebHostBuilder:

webBuilder.UseWebRoot("public");

Untuk informasi selengkapnya, lihat:

Mengelola masa pakai host

Panggil metode pada implementasi bawaan IHost untuk memulai dan menghentikan aplikasi. Metode ini memengaruhi semua IHostedService implementasi yang terdaftar dalam kontainer layanan.

jalankan

Run menjalankan aplikasi dan memblokir utas panggilan hingga host dimatikan.

RunAsync

RunAsync menjalankan aplikasi dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

RunConsoleAsync

RunConsoleAsync memungkinkan dukungan konsol, membangun, dan memulai host, dan menunggu Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM dimatikan.

Mulai

Start memulai host secara sinkron.

StartAsync

StartAsync memulai host dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

WaitForStartAsync dipanggil pada awal StartAsync, yang menunggu sampai selesai sebelum melanjutkan. Metode ini dapat digunakan untuk menunda startup hingga disinyalir oleh peristiwa eksternal.

StopAsync

StopAsync mencoba untuk menghentikan host dalam batas waktu yang disediakan.

WaitForShutdown

WaitForShutdown memblokir utas panggilan hingga matikan dipicu oleh IHostLifetime, seperti melalui Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM.

WaitForShutdownAsync

WaitForShutdownAsyncTask mengembalikan yang selesai ketika pematian dipicu melalui token dan panggilan yang StopAsyncdiberikan .

Templat ASP.NET Core membuat Host Generik .NET Core (HostBuilder).

Artikel ini menyediakan informasi tentang menggunakan Host Generik .NET di ASP.NET Core. Untuk informasi tentang menggunakan Host Generik .NET di aplikasi konsol, lihat Host Generik .NET.

Definisi host

Host adalah objek yang merangkum sumber daya aplikasi, seperti:

  • Injeksi dependensi (DI)
  • Pengelogan
  • Konfigurasi
  • Implementasi IHostedService

Saat dimulai, host memanggil IHostedService.StartAsync pada setiap implementasi IHostedService yang terdaftar dalam kumpulan layanan yang dihosting kontainer layanan. Dalam aplikasi web, salah IHostedService satu implementasinya adalah layanan web yang memulai implementasi server HTTP.

Alasan utama untuk menyertakan semua sumber daya aplikasi yang saling bergantung dalam satu objek adalah pengelolaan masa pakai: kontrol atas pengaktifan dan penonaktifan aplikasi dengan baik.

Menyiapkan host

Host biasanya dikonfigurasi, dibangun, dan dijalankan oleh kode di kelas Program. Metode Main:

  • Memanggil metode CreateHostBuilder untuk membuat dan mengonfigurasi objek penyusun.
  • Build Panggilan dan Run metode pada objek penyusun.

Templat web ASP.NET Core menghasilkan kode berikut untuk membuat host:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Kode berikut membuat beban kerja non-HTTP dengan implementasi yang IHostedService ditambahkan ke kontainer DI.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
               services.AddHostedService<Worker>();
            });
}

Untuk beban kerja HTTP, Main metodenya sama tetapi CreateHostBuilder memanggil ConfigureWebHostDefaults:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Jika aplikasi menggunakan Entity Framework Core, jangan ubah nama atau tanda tangan CreateHostBuilder metode. Alat Entity Framework Core mengharapkan untuk menemukan CreateHostBuilder metode yang mengonfigurasi host tanpa menjalankan aplikasi. Untuk informasi selengkapnya, lihat Pembuatan DbContext waktu desain.

Pengaturan penyusun default

Metode CreateDefaultBuilder:

  • Mengatur akar konten ke jalur yang dikembalikan oleh GetCurrentDirectory.
  • Memuat konfigurasi host dari:
    • Variabel lingkungan yang diawali dengan DOTNET_.
    • Argumen baris perintah.
  • Memuat konfigurasi aplikasi dari:
    • appsettings.json.
    • appsettings.{Environment}.json.
    • Rahasia pengguna saat aplikasi berjalan di Development lingkungan.
    • Variabel lingkungan.
    • Argumen baris perintah.
  • Menambahkan penyedia pengelogan berikut:
    • Konsol
    • Debug
    • EventSource
    • EventLog (hanya saat menjalankan di Windows)
  • Mengaktifkan validasi cakupan dan validasi dependensi saat lingkungan adalah Pengembangan.

Metode ConfigureWebHostDefaults:

Bagian Pengaturan untuk semua jenis aplikasi dan Pengaturan untuk aplikasi web nanti di artikel ini memperlihatkan cara mengambil alih pengaturan penyusun default.

Layanan yang disediakan kerangka kerja

Layanan berikut terdaftar secara otomatis:

Untuk informasi selengkapnya tentang layanan yang disediakan kerangka kerja, lihat Injeksi dependensi di ASP.NET Core.

IHostApplicationLifetime

IHostApplicationLifetime Masukkan layanan (sebelumnyaIApplicationLifetime) ke kelas mana pun untuk menangani tugas pasca-startup dan shutdown yang lancar. Tiga properti pada antarmuka adalah token pembatalan yang digunakan untuk mendaftarkan metode penanganan aktivitas mulai aplikasi dan penghentian aplikasi. Antarmuka juga mencakup metode StopApplication.

Contoh berikut adalah implementasi IHostedService yang mendaftarkan peristiwa IHostApplicationLifetime:

internal class LifetimeEventsHostedService : IHostedService
{
    private readonly ILogger _logger;
    private readonly IHostApplicationLifetime _appLifetime;

    public LifetimeEventsHostedService(
        ILogger<LifetimeEventsHostedService> logger, 
        IHostApplicationLifetime appLifetime)
    {
        _logger = logger;
        _appLifetime = appLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _appLifetime.ApplicationStarted.Register(OnStarted);
        _appLifetime.ApplicationStopping.Register(OnStopping);
        _appLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("OnStarted has been called.");

        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        _logger.LogInformation("OnStopping has been called.");

        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        _logger.LogInformation("OnStopped has been called.");

        // Perform post-stopped activities here
    }
}

IHostLifetime

Implementasi IHostLifetime mengontrol waktu host dimulai dan dihentikan. Implementasi terakhir yang terdaftar akan digunakan.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime adalah implementasi IHostLifetime default. ConsoleLifetime:

IHostEnvironment

Injeksikan layanan IHostEnvironment ke dalam kelas untuk mendapatkan informasi tentang pengaturan berikut:

Aplikasi web mengimplementasikan IWebHostEnvironment antarmuka , yang mewarisi IHostEnvironment dan menambahkan WebRootPath.

Konfigurasi host

Konfigurasi host digunakan untuk properti IHostEnvironment implementasi.

Konfigurasi host tersedia dari HostBuilderContext.Configuration dalam ConfigureAppConfiguration. Setelah ConfigureAppConfiguration, HostBuilderContext.Configuration diganti dengan konfigurasi aplikasi.

Untuk menambahkan konfigurasi host, panggil ConfigureHostConfiguration di IHostBuilder. ConfigureHostConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Host menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Penyedia variabel lingkungan dengan awalan DOTNET_ dan argumen baris perintah disertakan oleh CreateDefaultBuilder. Untuk aplikasi web, penyedia variabel lingkungan dengan awalan ASPNETCORE_ ditambahkan. Awalan dihapus saat variabel lingkungan dibaca. Misalnya, nilai variabel lingkungan untuk ASPNETCORE_ENVIRONMENT menjadi nilai konfigurasi host untuk environment kunci.

Contoh berikut membuat konfigurasi host:

// using Microsoft.Extensions.Configuration;

Host.CreateDefaultBuilder(args)
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    });

Konfigurasi aplikasi

Konfigurasi aplikasi dibuat dengan memanggil ConfigureAppConfiguration di IHostBuilder. ConfigureAppConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Aplikasi ini menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Konfigurasi yang dibuat oleh ConfigureAppConfiguration tersedia di HostBuilderContext.Configuration untuk operasi berikutnya dan sebagai layanan dari DI. Konfigurasi host juga ditambahkan ke konfigurasi aplikasi.

Untuk informasi selengkapnya, lihat Konfigurasi di ASP.NET Core.

Pengaturan untuk semua jenis aplikasi

Bagian ini mencantumkan pengaturan host yang berlaku untuk beban kerja HTTP dan non-HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ , yang muncul dalam daftar pengaturan berikut sebagai {PREFIX_} tempat penampung. Untuk informasi selengkapnya, lihat bagian Pengaturan penyusun default dan Konfigurasi: Variabel lingkungan.

ApplicationName

Properti IHostEnvironment.ApplicationName diatur dari konfigurasi host selama konstruksi host.

Kunci: applicationName
Jenis: string
Default: Nama assembly yang berisi titik masuk aplikasi.
Variabel lingkungan: {PREFIX_}APPLICATIONNAME

Untuk mengatur nilai ini, gunakan variabel lingkungan.

ContentRoot

Properti IHostEnvironment.ContentRootPath menentukan di mana host mulai mencari file konten. Jika jalur tidak ada, host gagal memulai.

Kunci: contentRoot
Jenis: string
Default: Folder tempat assembly aplikasi berada.
Variabel lingkungan: {PREFIX_}CONTENTROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseContentRoot pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\content-root")
    //...

Untuk informasi selengkapnya, lihat:

EnvironmentName

Properti IHostEnvironment.EnvironmentName dapat diatur ke nilai apa pun. Nilai yang ditentukan kerangka kerja meliputi Development, , Stagingdan Production. Nilai tidak peka huruf besar/kecil.

Kunci: environment
Jenis: string
Default: Production
Variabel lingkungan: {PREFIX_}ENVIRONMENT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseEnvironment pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    //...

ShutdownTimeout

HostOptions.ShutdownTimeout mengatur batas waktu untuk StopAsync. Nilai defaultnya adalah lima detik. Selama periode batas waktu, host:

Jika periode batas waktu berakhir sebelum semua layanan yang dihosting berhenti, layanan aktif yang tersisa akan dihentikan saat aplikasi dimatikan. Layanan berhenti meskipun belum selesai diproses. Jika layanan memerlukan lebih banyak waktu untuk berhenti, tingkatkan batas waktu.

Kunci: shutdownTimeoutSeconds
Jenis: int
Default: 5 detik
Variabel lingkungan: {PREFIX_}SHUTDOWNTIMEOUTSECONDS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau konfigurasikan HostOptions. Contoh berikut mengatur batas waktu menjadi 20 detik:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    });

Menonaktifkan muat ulang konfigurasi aplikasi saat perubahan

Secara default, appsettings.json dan appsettings.{Environment}.json dimuat ulang saat file berubah. Untuk menonaktifkan perilaku muat ulang ini di ASP.NET Core 5.0 atau yang lebih baru, atur kunci ke hostBuilder:reloadConfigOnChangefalse.

Kunci: hostBuilder:reloadConfigOnChange
Jenis: bool (true atau false)
Default: true
Argumen baris perintah: hostBuilder:reloadConfigOnChange
Variabel lingkungan: {PREFIX_}hostBuilder:reloadConfigOnChange

Peringatan

Pemisah titik dua (:) tidak berfungsi dengan kunci hierarkis variabel lingkungan di semua platform. Untuk informasi selengkapnya, lihat Variabel lingkungan.

Pengaturan untuk aplikasi web

Beberapa pengaturan host hanya berlaku untuk beban kerja HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ , yang muncul dalam daftar pengaturan berikut sebagai {PREFIX_} tempat penampung.

Metode ekstensi pada IWebHostBuilder tersedia untuk pengaturan ini. Sampel kode yang menunjukkan cara memanggil metode ekstensi mengasumsikan webBuilder adalah instans , IWebHostBuilderseperti dalam contoh berikut:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.CaptureStartupErrors(true);
            webBuilder.UseStartup<Startup>();
        });

CaptureStartupErrors

Ketika false, kesalahan selama startup mengakibatkan host keluar. Ketika true, host menangkap pengecualian selama startup dan mencoba memulai server.

Kunci: captureStartupErrors
Jenis: bool (true/1 atau false/0)
Default: Default ke false kecuali aplikasi berjalan dengan Kestrel di belakang IIS, di mana defaultnya adalah true.
Variabel lingkungan: {PREFIX_}CAPTURESTARTUPERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan CaptureStartupErrors:

webBuilder.CaptureStartupErrors(true);

DetailEdErrors

Saat diaktifkan, atau saat lingkungan adalah Development, aplikasi menangkap kesalahan terperinci.

Kunci: detailedErrors
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}DETAILEDERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");

HostingStartupAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dimuat saat startup. Meskipun nilai konfigurasi default ke string kosong, rakitan startup hosting selalu menyertakan assembly aplikasi. Saat rakitan startup hosting disediakan, mereka ditambahkan ke assembly aplikasi untuk dimuat saat aplikasi membangun layanan umumnya selama startup.

Kunci: hostingStartupAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");

HostingStartupExcludeAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dikecualikan saat startup.

Kunci: hostingStartupExcludeAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");

HTTPS_Port

Port pengalihan HTTPS. Digunakan dalam memberlakukan HTTPS.

Kunci: https_port
Jenis: string
Default: Nilai default tidak diatur.
Variabel lingkungan: {PREFIX_}HTTPS_PORT

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting("https_port", "8080");

PreferHostingUrls

Menunjukkan apakah host harus mendengarkan URL yang dikonfigurasi dengan IWebHostBuilder alih-alih URL yang dikonfigurasi dengan IServer implementasi.

Kunci: preferHostingUrls
Jenis: bool (true/1 atau false/0)
Default: true
Variabel lingkungan: {PREFIX_}PREFERHOSTINGURLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil PreferHostingUrls:

webBuilder.PreferHostingUrls(false);

PreventHostingStartup

Mencegah pemuatan otomatis rakitan startup hosting, termasuk rakitan startup hosting yang dikonfigurasi oleh rakitan aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Kunci: preventHostingStartup
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}PREVENTHOSTINGSTARTUP

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseSetting :

webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");

StartupAssembly

Perakitan untuk Startup mencari kelas .

Kunci: startupAssembly
Jenis: string
Default: Rakitan aplikasi
Variabel lingkungan: {PREFIX_}STARTUPASSEMBLY

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseStartup. UseStartup dapat mengambil nama rakitan (string) atau jenis (TStartup). Jika beberapa UseStartup metode dipanggil, metode terakhir lebih diutamakan.

webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();

SuppressStatusMessages

Saat diaktifkan, menekan pesan status startup hosting.

Kunci: suppressStatusMessages
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}SUPPRESSSTATUSMESSAGES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");

URL

Daftar alamat IP atau alamat host yang dibatasi titik koma dengan port dan protokol yang harus didengarkan server untuk permintaan. Contohnya:http://localhost:123 Gunakan "*" untuk menunjukkan bahwa server harus mendengarkan permintaan pada alamat IP atau nama host apa pun menggunakan port dan protokol yang ditentukan (misalnya, http://*:5000). Protokol (http:// atau https://) harus disertakan dengan setiap URL. Format yang didukung bervariasi di antara server.

Kunci: urls
Jenis: string
Default: http://localhost:5000 dan https://localhost:5001
Variabel lingkungan: {PREFIX_}URLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseUrls:

webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

Kestrel memiliki API konfigurasi titik akhirnya sendiri. Untuk informasi selengkapnya, lihat Mengonfigurasi titik akhir untuk server web ASP.NET CoreKestrel.

Webroot

Properti IWebHostEnvironment.WebRootPath menentukan jalur relatif ke aset statis aplikasi. Jika jalur tidak ada, penyedia file tanpa operasi akan digunakan.

Kunci: webroot
Jenis: string
Default: Defaultnya adalah wwwroot. Jalur ke {content root}/wwwroot harus ada.
Variabel lingkungan: {PREFIX_}WEBROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseWebRoot pada IWebHostBuilder:

webBuilder.UseWebRoot("public");

Untuk informasi selengkapnya, lihat:

Mengelola masa pakai host

Panggil metode pada implementasi bawaan IHost untuk memulai dan menghentikan aplikasi. Metode ini memengaruhi semua IHostedService implementasi yang terdaftar dalam kontainer layanan.

jalankan

Run menjalankan aplikasi dan memblokir utas panggilan hingga host dimatikan.

RunAsync

RunAsync menjalankan aplikasi dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

RunConsoleAsync

RunConsoleAsync memungkinkan dukungan konsol, membangun, dan memulai host, dan menunggu Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM dimatikan.

Mulai

Start memulai host secara sinkron.

StartAsync

StartAsync memulai host dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

WaitForStartAsync dipanggil pada awal StartAsync, yang menunggu sampai selesai sebelum melanjutkan. Metode ini dapat digunakan untuk menunda startup hingga disinyalir oleh peristiwa eksternal.

StopAsync

StopAsync mencoba untuk menghentikan host dalam batas waktu yang disediakan.

WaitForShutdown

WaitForShutdown memblokir utas panggilan hingga matikan dipicu oleh IHostLifetime, seperti melalui Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM.

WaitForShutdownAsync

WaitForShutdownAsyncTask mengembalikan yang selesai ketika pematian dipicu melalui token dan panggilan yang StopAsyncdiberikan .

Kontrol eksternal

Kontrol langsung masa pakai host dapat dicapai menggunakan metode yang dapat dipanggil secara eksternal:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

Templat ASP.NET Core membuat Host Generik .NET Core (HostBuilder).

Artikel ini menyediakan informasi tentang menggunakan Host Generik .NET di ASP.NET Core. Untuk informasi tentang menggunakan Host Generik .NET di aplikasi konsol, lihat Host Generik .NET.

Definisi host

Host adalah objek yang merangkum sumber daya aplikasi, seperti:

  • Injeksi dependensi (DI)
  • Pengelogan
  • Konfigurasi
  • Implementasi IHostedService

Saat dimulai, host memanggil IHostedService.StartAsync pada setiap implementasi IHostedService yang terdaftar dalam kumpulan layanan yang dihosting kontainer layanan. Dalam aplikasi web, salah IHostedService satu implementasinya adalah layanan web yang memulai implementasi server HTTP.

Alasan utama untuk menyertakan semua sumber daya aplikasi yang saling bergantung dalam satu objek adalah pengelolaan masa pakai: kontrol atas pengaktifan dan penonaktifan aplikasi dengan baik.

Menyiapkan host

Host biasanya dikonfigurasi, dibangun, dan dijalankan oleh kode di kelas Program. Metode Main:

  • Memanggil metode CreateHostBuilder untuk membuat dan mengonfigurasi objek penyusun.
  • Build Panggilan dan Run metode pada objek penyusun.

Templat web ASP.NET Core menghasilkan kode berikut untuk membuat Host Generik:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Kode berikut membuat Host Generik menggunakan beban kerja non-HTTP. Implementasi IHostedService ditambahkan ke kontainer DI:

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
               services.AddHostedService<Worker>();
            });
}

Untuk beban kerja HTTP, Main metodenya sama tetapi CreateHostBuilder memanggil ConfigureWebHostDefaults:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Kode sebelumnya dihasilkan oleh templat ASP.NET Core.

Jika aplikasi menggunakan Entity Framework Core, jangan ubah nama atau tanda tangan CreateHostBuilder metode. Alat Entity Framework Core mengharapkan untuk menemukan CreateHostBuilder metode yang mengonfigurasi host tanpa menjalankan aplikasi. Untuk informasi selengkapnya, lihat Pembuatan DbContext waktu desain.

Pengaturan penyusun default

Metode CreateDefaultBuilder:

  • Mengatur akar konten ke jalur yang dikembalikan oleh GetCurrentDirectory.
  • Memuat konfigurasi host dari:
    • Variabel lingkungan yang diawali dengan DOTNET_.
    • Argumen baris perintah.
  • Memuat konfigurasi aplikasi dari:
    • appsettings.json.
    • appsettings.{Environment}.json.
    • Rahasia pengguna saat aplikasi berjalan di Development lingkungan.
    • Variabel lingkungan.
    • Argumen baris perintah.
  • Menambahkan penyedia pengelogan berikut:
    • Konsol
    • Debug
    • EventSource
    • EventLog (hanya saat menjalankan di Windows)
  • Mengaktifkan validasi cakupan dan validasi dependensi saat lingkungan adalah Pengembangan.

Metode ConfigureWebHostDefaults:

Bagian Pengaturan untuk semua jenis aplikasi dan Pengaturan untuk aplikasi web nanti di artikel ini memperlihatkan cara mengganti pengaturan penyusun default.

Layanan yang disediakan kerangka kerja

Layanan berikut terdaftar secara otomatis:

Untuk informasi selengkapnya tentang layanan yang disediakan kerangka kerja, lihat Injeksi dependensi di ASP.NET Core.

IHostApplicationLifetime

IHostApplicationLifetime Masukkan layanan (sebelumnyaIApplicationLifetime) ke kelas mana pun untuk menangani tugas pasca-startup dan matikan dengan baik. Tiga properti pada antarmuka adalah token pembatalan yang digunakan untuk mendaftarkan metode penanganan aktivitas mulai aplikasi dan penghentian aplikasi. Antarmuka juga mencakup metode StopApplication.

Contoh berikut adalah implementasi IHostedService yang mendaftarkan peristiwa IHostApplicationLifetime:

internal class LifetimeEventsHostedService : IHostedService
{
    private readonly ILogger _logger;
    private readonly IHostApplicationLifetime _appLifetime;

    public LifetimeEventsHostedService(
        ILogger<LifetimeEventsHostedService> logger, 
        IHostApplicationLifetime appLifetime)
    {
        _logger = logger;
        _appLifetime = appLifetime;
    }

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _appLifetime.ApplicationStarted.Register(OnStarted);
        _appLifetime.ApplicationStopping.Register(OnStopping);
        _appLifetime.ApplicationStopped.Register(OnStopped);

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }

    private void OnStarted()
    {
        _logger.LogInformation("OnStarted has been called.");

        // Perform post-startup activities here
    }

    private void OnStopping()
    {
        _logger.LogInformation("OnStopping has been called.");

        // Perform on-stopping activities here
    }

    private void OnStopped()
    {
        _logger.LogInformation("OnStopped has been called.");

        // Perform post-stopped activities here
    }
}

IHostLifetime

Implementasi IHostLifetime mengontrol waktu host dimulai dan dihentikan. Implementasi terakhir yang terdaftar akan digunakan.

Microsoft.Extensions.Hosting.Internal.ConsoleLifetime adalah implementasi IHostLifetime default. ConsoleLifetime:

IHostEnvironment

Injeksikan layanan IHostEnvironment ke dalam kelas untuk mendapatkan informasi tentang pengaturan berikut:

Aplikasi web mengimplementasikan IWebHostEnvironment antarmuka, yang mewarisi IHostEnvironment dan menambahkan WebRootPath.

Konfigurasi host

Konfigurasi host digunakan untuk properti IHostEnvironment implementasi.

Konfigurasi host tersedia dari HostBuilderContext.Configuration dalam ConfigureAppConfiguration. Setelah ConfigureAppConfiguration, HostBuilderContext.Configuration diganti dengan konfigurasi aplikasi.

Untuk menambahkan konfigurasi host, panggil ConfigureHostConfiguration di IHostBuilder. ConfigureHostConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Host menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Penyedia variabel lingkungan dengan awalan DOTNET_ dan argumen baris perintah disertakan oleh CreateDefaultBuilder. Untuk aplikasi web, penyedia variabel lingkungan dengan awalan ASPNETCORE_ ditambahkan. Awalan dihapus saat variabel lingkungan dibaca. Misalnya, nilai variabel lingkungan untuk ASPNETCORE_ENVIRONMENT menjadi nilai konfigurasi host untuk environment kunci.

Contoh berikut membuat konfigurasi host:

// using Microsoft.Extensions.Configuration;

Host.CreateDefaultBuilder(args)
    .ConfigureHostConfiguration(configHost =>
    {
        configHost.SetBasePath(Directory.GetCurrentDirectory());
        configHost.AddJsonFile("hostsettings.json", optional: true);
        configHost.AddEnvironmentVariables(prefix: "PREFIX_");
        configHost.AddCommandLine(args);
    });

Konfigurasi aplikasi

Konfigurasi aplikasi dibuat dengan memanggil ConfigureAppConfiguration di IHostBuilder. ConfigureAppConfiguration dapat dipanggil beberapa kali dengan hasil tambahan. Aplikasi ini menggunakan opsi mana pun yang mengatur nilai terakhir pada kunci tertentu.

Konfigurasi yang dibuat oleh ConfigureAppConfiguration tersedia di HostBuilderContext.Configuration untuk operasi berikutnya dan sebagai layanan dari DI. Konfigurasi host juga ditambahkan ke konfigurasi aplikasi.

Untuk informasi selengkapnya, lihat Konfigurasi di ASP.NET Core.

Pengaturan untuk semua jenis aplikasi

Bagian ini mencantumkan pengaturan host yang berlaku untuk beban kerja HTTP dan non-HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ , yang muncul dalam konfigurasi berikut untuk {PREFIX_} tempat penampung.

ApplicationName

Properti IHostEnvironment.ApplicationName diatur dari konfigurasi host selama konstruksi host.

Kunci: applicationName
Jenis: string
Default: Nama assembly yang berisi titik masuk aplikasi.
Variabel lingkungan: {PREFIX_}APPLICATIONNAME

Untuk mengatur nilai ini, gunakan variabel lingkungan.

ContentRoot

Properti IHostEnvironment.ContentRootPath menentukan tempat host mulai mencari file konten. Jika jalur tidak ada, host gagal memulai.

Kunci: contentRoot
Jenis: string
Default: Folder tempat rakitan aplikasi berada.
Variabel lingkungan: {PREFIX_}CONTENTROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseContentRoot pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseContentRoot("c:\\content-root")
    //...

Untuk informasi selengkapnya, lihat:

EnvironmentName

Properti IHostEnvironment.EnvironmentName dapat diatur ke nilai apa pun. Nilai yang ditentukan kerangka kerja meliputi Development, , Stagingdan Production. Nilai tidak peka huruf besar/kecil.

Kunci: environment
Jenis: string
Default: Production
Variabel lingkungan: {PREFIX_}ENVIRONMENT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseEnvironment pada IHostBuilder:

Host.CreateDefaultBuilder(args)
    .UseEnvironment("Development")
    //...

ShutdownTimeout

HostOptions.ShutdownTimeout mengatur batas waktu untuk StopAsync. Nilai defaultnya adalah lima detik. Selama periode batas waktu, host:

Jika periode batas waktu berakhir sebelum semua layanan yang dihosting berhenti, layanan aktif yang tersisa akan dihentikan saat aplikasi dimatikan. Layanan berhenti meskipun belum selesai diproses. Jika layanan memerlukan lebih banyak waktu untuk berhenti, tingkatkan batas waktu.

Kunci: shutdownTimeoutSeconds
Jenis: int
Default: 5 detik
Variabel lingkungan: {PREFIX_}SHUTDOWNTIMEOUTSECONDS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau konfigurasikan HostOptions. Contoh berikut mengatur batas waktu menjadi 20 detik:

Host.CreateDefaultBuilder(args)
    .ConfigureServices((hostContext, services) =>
    {
        services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = System.TimeSpan.FromSeconds(20);
        });
    });

Pengaturan untuk aplikasi web

Beberapa pengaturan host hanya berlaku untuk beban kerja HTTP. Secara default, variabel lingkungan yang digunakan untuk mengonfigurasi pengaturan ini dapat memiliki DOTNET_ awalan atau ASPNETCORE_ .

Metode ekstensi pada IWebHostBuilder tersedia untuk pengaturan ini. Sampel kode yang menunjukkan cara memanggil metode ekstensi mengasumsikan webBuilder adalah instans , IWebHostBuilderseperti dalam contoh berikut:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.CaptureStartupErrors(true);
            webBuilder.UseStartup<Startup>();
        });

CaptureStartupErrors

Ketika false, kesalahan selama startup mengakibatkan host keluar. Ketika true, host menangkap pengecualian selama startup dan mencoba memulai server.

Kunci: captureStartupErrors
Jenis: bool (true/1 atau false/0)
Default: Default ke false kecuali aplikasi berjalan dengan Kestrel di belakang IIS, di mana defaultnya adalah true.
Variabel lingkungan: {PREFIX_}CAPTURESTARTUPERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan CaptureStartupErrors:

webBuilder.CaptureStartupErrors(true);

DetailEdErrors

Saat diaktifkan, atau saat lingkungan adalah Development, aplikasi menangkap kesalahan terperinci.

Kunci: detailedErrors
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}DETAILEDERRORS

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");

HostingStartupAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dimuat saat startup. Meskipun nilai konfigurasi default ke string kosong, rakitan startup hosting selalu menyertakan assembly aplikasi. Saat rakitan startup hosting disediakan, mereka ditambahkan ke assembly aplikasi untuk dimuat saat aplikasi membangun layanan umumnya selama startup.

Kunci: hostingStartupAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "assembly1;assembly2");

HostingStartupExcludeAssemblies

String rakitan startup hosting yang dibatasi titik koma untuk dikecualikan saat startup.

Kunci: hostingStartupExcludeAssemblies
Jenis: string
Default: String kosong
Variabel lingkungan: {PREFIX_}HOSTINGSTARTUPEXCLUDEASSEMBLIES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.HostingStartupExcludeAssembliesKey, "assembly1;assembly2");

HTTPS_Port

Port pengalihan HTTPS. Digunakan dalam memberlakukan HTTPS.

Kunci: https_port
Jenis: string
Default: Nilai default tidak diatur.
Variabel lingkungan: {PREFIX_}HTTPS_PORT

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting("https_port", "8080");

PreferHostingUrls

Menunjukkan apakah host harus mendengarkan URL yang dikonfigurasi dengan IWebHostBuilder alih-alih URL yang dikonfigurasi dengan IServer implementasi.

Kunci: preferHostingUrls
Jenis: bool (true/1 atau false/0)
Default: true
Variabel lingkungan: {PREFIX_}PREFERHOSTINGURLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil PreferHostingUrls:

webBuilder.PreferHostingUrls(false);

PreventHostingStartup

Mencegah pemuatan otomatis rakitan startup hosting, termasuk rakitan startup hosting yang dikonfigurasi oleh rakitan aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Kunci: preventHostingStartup
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}PREVENTHOSTINGSTARTUP

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseSetting :

webBuilder.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true");

StartupAssembly

Perakitan untuk Startup mencari kelas .

Kunci: startupAssembly
Jenis: string
Default: Rakitan aplikasi
Variabel lingkungan: {PREFIX_}STARTUPASSEMBLY

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseStartup. UseStartup dapat mengambil nama rakitan (string) atau jenis (TStartup). Jika beberapa UseStartup metode dipanggil, metode terakhir lebih diutamakan.

webBuilder.UseStartup("StartupAssemblyName");
webBuilder.UseStartup<Startup>();

SuppressStatusMessages

Saat diaktifkan, menekan pesan status startup hosting.

Kunci: suppressStatusMessages
Jenis: bool (true/1 atau false/0)
Default: false
Variabel lingkungan: {PREFIX_}SUPPRESSSTATUSMESSAGES

Untuk mengatur nilai ini, gunakan konfigurasi atau panggilan UseSetting:

webBuilder.UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "true");

URL

Daftar alamat IP atau alamat host yang dibatasi titik koma dengan port dan protokol yang harus didengarkan server untuk permintaan. Contohnya:http://localhost:123 Gunakan "*" untuk menunjukkan bahwa server harus mendengarkan permintaan pada alamat IP atau nama host apa pun menggunakan port dan protokol yang ditentukan (misalnya, http://*:5000). Protokol (http:// atau https://) harus disertakan dengan setiap URL. Format yang didukung bervariasi di antara server.

Kunci: urls
Jenis: string
Default: http://localhost:5000 dan https://localhost:5001
Variabel lingkungan: {PREFIX_}URLS

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseUrls:

webBuilder.UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

Kestrel memiliki API konfigurasi titik akhirnya sendiri. Untuk informasi selengkapnya, lihat Kestrel implementasi server web di ASP.NET Core.

Webroot

Properti IWebHostEnvironment.WebRootPath menentukan jalur relatif ke aset statis aplikasi. Jika jalur tidak ada, penyedia file tanpa operasi akan digunakan.

Kunci: webroot
Jenis: string
Default: Defaultnya adalah wwwroot. Jalur ke {content root}/wwwroot harus ada.
Variabel lingkungan: {PREFIX_}WEBROOT

Untuk mengatur nilai ini, gunakan variabel lingkungan atau panggil UseWebRoot pada IWebHostBuilder:

webBuilder.UseWebRoot("public");

Untuk informasi selengkapnya, lihat:

Mengelola masa pakai host

Panggil metode pada implementasi bawaan IHost untuk memulai dan menghentikan aplikasi. Metode ini memengaruhi semua IHostedService implementasi yang terdaftar dalam kontainer layanan.

jalankan

Run menjalankan aplikasi dan memblokir utas panggilan hingga host dimatikan.

RunAsync

RunAsync menjalankan aplikasi dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

RunConsoleAsync

RunConsoleAsync memungkinkan dukungan konsol, membangun, dan memulai host, dan menunggu Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM dimatikan.

Mulai

Start memulai host secara sinkron.

StartAsync

StartAsync memulai host dan mengembalikan Task yang selesai saat token pembatalan atau pematian dipicu.

WaitForStartAsync dipanggil pada awal StartAsync, yang menunggu sampai selesai sebelum melanjutkan. Metode ini dapat digunakan untuk menunda startup hingga disinyalir oleh peristiwa eksternal.

StopAsync

StopAsync mencoba untuk menghentikan host dalam batas waktu yang disediakan.

WaitForShutdown

WaitForShutdown memblokir utas panggilan hingga matikan dipicu oleh IHostLifetime, seperti melalui Ctrl+C/SIGINT (Windows), +C (macOS), atau SIGTERM.

WaitForShutdownAsync

WaitForShutdownAsyncTask mengembalikan yang selesai ketika pematian dipicu melalui token yang diberikan dan panggilan StopAsync.

Kontrol eksternal

Kontrol langsung masa pakai host dapat dicapai menggunakan metode yang dapat dipanggil secara eksternal:

public class Program
{
    private IHost _host;

    public Program()
    {
        _host = new HostBuilder()
            .Build();
    }

    public async Task StartAsync()
    {
        _host.StartAsync();
    }

    public async Task StopAsync()
    {
        using (_host)
        {
            await _host.StopAsync(TimeSpan.FromSeconds(5));
        }
    }
}

Sumber Daya Tambahan: