Startup aplikasi di ASP.NET Core

Note

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.

Warning

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 10 dari artikel ini.

Oleh Rick Anderson

ASP.NET Core aplikasi yang dibuat dengan templat web berisi kode startup aplikasi di file Program.cs.

Untuk Blazor panduan startup, yang menambahkan atau menggantikan panduan di artikel ini, lihat ASP.NET Core Blazor startup.

Kode startup aplikasi berikut mendukung beberapa jenis aplikasi:

using WebAll.Components;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorComponents()
    .AddInteractiveServerComponents();
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode();

app.UseAntiforgery();

app.Run();

Aplikasi yang menggunakan EventSource dapat mengukur waktu startup untuk memahami dan mengoptimalkan performa startup. Peristiwa ServerReady dalam Microsoft.AspNetCore.Hosting mewakili titik di mana server siap merespons permintaan.

Perluas Startup dengan penyaring startup

Gunakan IStartupFilter:

  • Untuk mengonfigurasi middleware di awal atau akhir alur middleware aplikasi tanpa panggilan eksplisit ke Use{Middleware}. Gunakan IStartupFilter untuk menambahkan default ke awal alur tanpa secara eksplisit mendaftarkan middleware default. IStartupFilter memungkinkan komponen yang berbeda untuk memanggil Use{Middleware} atas nama penulis aplikasi.

  • Untuk membuat jalur metode Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.

Implementasi IStartupFilter menyediakan Configure metode yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.

Setiap implementasi IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.

Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

dikonfigurasi RequestSetOptionsMiddleware di RequestSetOptionsStartupFilter kelas :

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

Implementasi IStartupFilter terdaftar dalam file Program.cs :

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

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

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter pendaftaran:

  • Beberapa implementasi IStartupFilter mungkin berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan mereka IStartupFilter agar sesuai dengan urutan yang harus dijalankan middleware mereka.

  • Perpustakaan dapat menambahkan middleware dengan satu atau beberapa implementasi IStartupFilter yang berjalan sebelum atau setelah middleware aplikasi lain yang terdaftar di IStartupFilter. Untuk memanggil IStartupFilter middleware sebelum middleware ditambahkan oleh pustaka IStartupFilter:

    • Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke kontainer layanan.

    • Untuk memanggil selanjutnya, posisikan registrasi layanan setelah pustaka ditambahkan.

Anda tidak dapat memperluas aplikasi ASP.NET Core ketika mengganti Configure. Untuk informasi selengkapnya, lihat GitHub /dotnet/aspnetcore/issues #45372.

Penambahan konfigurasi pada saat startup dari komponen eksternal

Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar file Program.cs aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Startup, Mengonfigurasi Layanan, dan Mengonfigurasi

Untuk informasi tentang penggunaan metode ConfigureServices dan Configure dengan model hosting minimal, lihat:

Aplikasi ASP.NET Core yang dibuat dengan template web berisi kode pengaktifan aplikasi dalam file Program.cs.

Kode startup aplikasi berikut mendukung:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseAuthorization();

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

app.MapDefaultControllerRoute();
app.MapRazorPages();

app.Run();

Untuk informasi selengkapnya tentang pengaktifan aplikasi, lihat gambaran umum dasar-dasar ASP.NET Core.

Perluas Startup dengan penyaring startup

Gunakan IStartupFilter:

  • Untuk mengonfigurasi middleware di awal atau akhir alur middleware aplikasi tanpa panggilan eksplisit ke Use{Middleware}. Gunakan IStartupFilter untuk menambahkan default ke awal alur tanpa secara eksplisit mendaftarkan middleware default. IStartupFilter memungkinkan komponen yang berbeda untuk memanggil Use{Middleware} atas nama penulis aplikasi.
  • Untuk membuat jalur metode Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.

IStartupFilter mengimplementasikan Configure, yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.

Masing-masing IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.

Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

RequestSetOptionsMiddleware dikonfigurasi dalam kelas RequestSetOptionsStartupFilter.

namespace WebStartup.Middleware;
// <snippet1>
public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}
// </snippet1>

IStartupFilter terdaftar di Program.cs:

using WebStartup.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();
builder.Services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();

var app = builder.Build();

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

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons:

@page
@model PrivacyModel
@{
    ViewData["Title"] = "Privacy Policy";
}
<h1>@ViewData["Title"]</h1>

<p> Append query string ?option=hello</p>
Option String: @HttpContext.Items["option"];

Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter registrasi:

  • Beberapa IStartupFilter implementasi dapat berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan mereka IStartupFilter agar sesuai dengan urutan yang harus dijalankan middleware mereka.

  • Pustaka dapat menambahkan middleware dengan satu atau beberapa IStartupFilter implementasi yang berjalan sebelum atau sesudah middleware aplikasi lain yang terdaftar dengan IStartupFilter. Untuk memanggil IStartupFilter middleware sebelum middleware ditambahkan oleh pustaka IStartupFilter:

    • Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke dalam kontainer layanan.
    • Untuk memanggil layanan setelahnya, posisikan registrasi layanan setelah pustaka ditambahkan.

Catatan: Anda tidak dapat memperluas aplikasi ASP.NET Core saat mengambil alih Configure. Untuk informasi lebih lanjut, lihat masalah GitHub ini.

Tambahkan konfigurasi pada saat startup dari rakitan eksternal

Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar file aplikasi Program.cs . Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Kelas Startup mengonfigurasi layanan dan alur permintaan aplikasi.

Kelas Startup

aplikasi ASP.NET Core menggunakan Startup kelas, yang dinamai Startup berdasarkan konvensi. Kelas Startup:

  • Secara opsional menyertakan ConfigureServices metode untuk mengonfigurasi layanan aplikasi. Layanan adalah komponen yang dapat digunakan kembali yang menyediakan fungsionalitas aplikasi. Layanan terdaftar diConfigureServices dan digunakan di seluruh aplikasi melalui injeksi dependensi (DI) atau ApplicationServices.
  • Configure Menyertakan metode untuk membuat alur pemrosesan permintaan aplikasi.

ConfigureServices dan Configure dipanggil oleh runtime ASP.NET Core saat aplikasi dimulai:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Sampel sebelumnya adalah untuk Razor Pages; versi MVC serupa.

Kelas Startup ditentukan saat host aplikasi dibuat. Kelas Startup biasanya ditentukan dengan memanggil WebHostBuilderExtensions.UseStartup/<TStartup> metode pada pembangun 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>();
            });
}

Host menyediakan layanan yang tersedia untuk Startup konstruktor kelas. Aplikasi ini menambahkan layanan tambahan melalui ConfigureServices. Layanan host dan aplikasi tersedia di Configure dan di seluruh aplikasi.

Hanya jenis layanan berikut yang dapat disuntikkan ke Startup konstruktor saat menggunakan Host Generik (IHostBuilder):

public class Startup
{
    private readonly IWebHostEnvironment _env;

    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        Configuration = configuration;
        _env = env;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        if (_env.IsDevelopment())
        {
        }
        else
        {
        }
    }
}

Sebagian besar layanan tidak tersedia sampai metode Configure dipanggil.

Beberapa Perusahaan Rintisan

Saat aplikasi menentukan kelas terpisah Startup untuk lingkungan yang berbeda (misalnya, StartupDevelopment), kelas yang sesuai Startup dipilih saat runtime. Kelas yang akhiran namanya cocok dengan lingkungan saat ini diprioritaskan. Jika aplikasi dijalankan di Development lingkungan dan menyertakan Startup kelas dan StartupDevelopment kelas, StartupDevelopment kelas akan digunakan. Untuk informasi selengkapnya, lihat Menggunakan beberapa lingkungan.

Lihat Host untuk informasi selengkapnya tentang host. Untuk informasi tentang menangani kesalahan selama startup, lihat Penanganan Pengecualian Startup.

Metode ConfigureServices

Metode ConfigureServices adalah sebagai berikut:

  • Optional.
  • Dipanggil oleh host sebelum metode Configure untuk mengonfigurasi layanan aplikasi.
  • Di mana opsi konfigurasi diatur menurut konvensi.

Host dapat mengonfigurasi beberapa layanan sebelum Startup metode dipanggil. Untuk informasi selengkapnya, lihat Host.

Untuk fitur-fitur yang membutuhkan penyiapan yang signifikan, terdapat metode ekstensi pada IServiceCollection. Misalnya, TambahkanDbContext, TambahkanDefaultIdentity, TambahkanEntityFrameworkStores, dan TambahkanRazorPages:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(
            options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();

        services.AddRazorPages();
    }

Menambahkan layanan ke wadah layanan menjadikannya tersedia dalam aplikasi dan metode Configure. Layanan diselesaikan melalui injeksi dependensi atau dari ApplicationServices.

Metode Konfigurasi

Metode Configure ini digunakan untuk menentukan bagaimana aplikasi merespons permintaan HTTP. Alur permintaan dikonfigurasi dengan menambahkan komponen middleware ke IApplicationBuilder instans. IApplicationBuilder tersedia untuk Configure metode , tetapi tidak terdaftar dalam kontainer layanan. Hosting membuat IApplicationBuilder dan meneruskannya langsung ke Configure.

Templat ASP.NET Core mengonfigurasi alur dengan dukungan untuk:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
        });
    }
}

Sampel sebelumnya adalah untuk Razor Pages; versi MVC serupa.

Setiap Use metode ekstensi menambahkan satu atau beberapa komponen middleware ke alur permintaan. Misalnya, UseStaticFiles mengonfigurasi middleware untuk melayani file statis.

Setiap komponen middleware dalam pipeline permintaan berfungsi untuk mengaktifkan komponen berikutnya dalam pipeline atau memutus rantai, jika sesuai.

Layanan tambahan, seperti IWebHostEnvironment, ILoggerFactory, atau apa pun yang ditentukan dalam ConfigureServices, dapat dispesifikasikan dalam signature metode Configure. Layanan ini disuntikkan jika tersedia.

Untuk informasi selengkapnya tentang cara menggunakan IApplicationBuilder dan urutan pemrosesan middleware, lihat ASP.NET Core Middleware.

Mengonfigurasi layanan tanpa Startup

Untuk mengonfigurasi layanan dan alur pemrosesan permintaan tanpa menggunakan Startup kelas, panggil ConfigureServices dan Configure metode kenyamanan pada pembuat host. Beberapa panggilan untuk ConfigureServices ditambahkan satu dengan yang lain. Jika ada beberapa metode Configure yang dipanggil, maka panggilan terakhir Configure digunakan.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.ConfigureServices(services =>
                {
                    services.AddControllersWithViews();
                })
                .Configure(app =>
                {
                    var loggerFactory = app.ApplicationServices
                        .GetRequiredService<ILoggerFactory>();
                    var logger = loggerFactory.CreateLogger<Program>();
                    var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                    var config = app.ApplicationServices.GetRequiredService<IConfiguration>();

                    logger.LogInformation("Logged in Configure");

                    if (env.IsDevelopment())
                    {
                        app.UseDeveloperExceptionPage();
                    }
                    else
                    {
                        app.UseExceptionHandler("/Home/Error");
                        app.UseHsts();
                    }

                    var configValue = config["MyConfigKey"];
                });
            });
        });
}

Perluas Startup dengan penyaring startup

Gunakan IStartupFilter:

  • Untuk mengonfigurasi middleware di awal atau akhir dari jalur middleware aplikasi Configure tanpa pemanggilan eksplisit ke Use{Middleware}. IStartupFilter digunakan oleh ASP.NET Core untuk menambahkan default ke awal alur tanpa harus membuat penulis aplikasi secara eksplisit mendaftarkan middleware default. IStartupFilter memungkinkan komponen yang berbeda untuk memanggil Use{Middleware} atas nama penulis aplikasi.
  • Untuk membuat jalur metode Configure. IStartupFilter.Configure dapat mengatur middleware untuk dijalankan sebelum atau sesudah middleware yang ditambahkan oleh kode library.

IStartupFilter mengimplementasikan Configure, yang menerima dan mengembalikan Action<IApplicationBuilder>. Menentukan IApplicationBuilder kelas untuk mengonfigurasi alur permintaan aplikasi. Untuk informasi selengkapnya, lihat Membuat alur middleware dengan IApplicationBuilder.

Masing-masing IStartupFilter dapat menambahkan satu atau beberapa middleware dalam alur permintaan. Filter dipanggil dalam urutan ditambahkan ke kontainer layanan. Filter dapat menambahkan middleware sebelum atau sesudah meneruskan kontrol ke filter berikutnya, sehingga ditambahkan ke awal atau akhir alur aplikasi.

Contoh berikut menunjukkan cara mendaftarkan middleware dengan IStartupFilter. Middleware RequestSetOptionsMiddleware mengatur nilai opsi dari parameter kueri.

public class RequestSetOptionsMiddleware
{
    private readonly RequestDelegate _next;

    public RequestSetOptionsMiddleware( RequestDelegate next )
    {
        _next = next;
    }

    // Test with https://localhost:5001/Privacy/?option=Hello
    public async Task Invoke(HttpContext httpContext)
    {
        var option = httpContext.Request.Query["option"];

        if (!string.IsNullOrWhiteSpace(option))
        {
            httpContext.Items["option"] = WebUtility.HtmlEncode(option);
        }

        await _next(httpContext);
    }
}

dikonfigurasi RequestSetOptionsMiddleware di RequestSetOptionsStartupFilter kelas :

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

IStartupFilter terdaftar dalam kontainer layanan di ConfigureServices.

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

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration((hostingContext, config) =>
           {
           })
         .ConfigureWebHostDefaults(webBuilder =>
         {
             webBuilder.UseStartup<Startup>();
         })
        .ConfigureServices(services =>
        {
            services.AddTransient<IStartupFilter,
                      RequestSetOptionsStartupFilter>();
        });
}

Saat parameter string kueri untuk option disediakan, middleware memproses penetapan nilai sebelum middleware ASP.NET Core merender respons.

Urutan eksekusi middleware ditetapkan oleh urutan IStartupFilter pendaftaran:

  • Beberapa IStartupFilter implementasi dapat berinteraksi dengan objek yang sama. Jika pemesanan penting, pesan pendaftaran layanan mereka IStartupFilter agar sesuai dengan urutan yang harus dijalankan middleware mereka.

  • Perpustakaan dapat menambahkan middleware dengan satu atau beberapa implementasi IStartupFilter yang berjalan sebelum atau sesudah middleware lain yang terdaftar dengan IStartupFilter. Untuk memanggil IStartupFilter middleware sebelum middleware ditambahkan oleh pustaka IStartupFilter:

    • Posisikan pendaftaran layanan sebelum pustaka ditambahkan ke kontainer layanan.
    • Untuk memanggil selanjutnya, posisikan registrasi layanan setelah pustaka ditambahkan.

Penambahan konfigurasi pada saat startup dari komponen eksternal

Implementasi IHostingStartup memungkinkan penambahan penyempurnaan ke aplikasi saat startup dari rakitan eksternal di luar kelas Startup aplikasi. Untuk informasi selengkapnya, lihat Menggunakan rakitan startup hosting di ASP.NET Core.

Sumber daya tambahan