Bagikan melalui


Middleware di aplikasi API Minimal

WebApplication secara otomatis menambahkan middleware berikut tergantung Minimal API applications pada kondisi tertentu:

  • UseDeveloperExceptionPage ditambahkan terlebih dahulu ketika HostingEnvironment adalah "Development".
  • UseRouting ditambahkan kedua jika kode pengguna belum memanggil UseRouting dan jika ada titik akhir yang dikonfigurasi, misalnya app.MapGet.
  • UseEndpoints ditambahkan di akhir alur middleware jika ada titik akhir yang dikonfigurasi.
  • UseAuthentication ditambahkan segera setelah UseRouting jika kode pengguna belum memanggil UseAuthentication dan apakah IAuthenticationSchemeProvider dapat terdeteksi di penyedia layanan. IAuthenticationSchemeProvider ditambahkan secara default saat menggunakan AddAuthentication, dan layanan terdeteksi menggunakan IServiceProviderIsService.
  • UseAuthorization ditambahkan berikutnya jika kode pengguna belum memanggil UseAuthorization dan apakah IAuthorizationHandlerProvider dapat terdeteksi di penyedia layanan. IAuthorizationHandlerProvider ditambahkan secara default saat menggunakan AddAuthorization, dan layanan terdeteksi menggunakan IServiceProviderIsService.
  • Middleware dan titik akhir yang dikonfigurasi pengguna ditambahkan antara UseRouting dan UseEndpoints.

Kode berikut secara efektif adalah apa yang ditambahkan middleware otomatis ke aplikasi:

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 => {});

Dalam beberapa kasus, konfigurasi middleware default tidak benar untuk aplikasi dan memerlukan modifikasi. Misalnya, UseCors harus dipanggil sebelum UseAuthentication dan UseAuthorization. Aplikasi perlu memanggil UseAuthentication dan UseAuthorization jika UseCors dipanggil:

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

Jika middleware harus dijalankan sebelum pencocokan rute terjadi, UseRouting harus dipanggil dan middleware harus ditempatkan sebelum panggilan ke UseRouting. UseEndpoints tidak diperlukan dalam kasus ini karena ditambahkan secara otomatis seperti yang dijelaskan sebelumnya:

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

app.UseRouting();

// other middleware and endpoints

Saat menambahkan middleware terminal:

  • Middleware harus ditambahkan setelah UseEndpoints.
  • Aplikasi perlu memanggil UseRouting dan UseEndpoints sehingga middleware terminal dapat ditempatkan di lokasi yang benar.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Middleware terminal adalah middleware yang berjalan jika tidak ada titik akhir yang menangani permintaan.

WebApplication secara otomatis menambahkan middleware berikut tergantung Minimal API applications pada kondisi tertentu:

  • UseDeveloperExceptionPage ditambahkan terlebih dahulu ketika HostingEnvironment adalah "Development".
  • UseRouting ditambahkan kedua jika kode pengguna belum memanggil UseRouting dan jika ada titik akhir yang dikonfigurasi, misalnya app.MapGet.
  • UseEndpoints ditambahkan di akhir alur middleware jika ada titik akhir yang dikonfigurasi.
  • UseAuthentication ditambahkan segera setelah UseRouting jika kode pengguna belum memanggil UseAuthentication dan apakah IAuthenticationSchemeProvider dapat terdeteksi di penyedia layanan. IAuthenticationSchemeProvider ditambahkan secara default saat menggunakan AddAuthentication, dan layanan terdeteksi menggunakan IServiceProviderIsService.
  • UseAuthorization ditambahkan berikutnya jika kode pengguna belum memanggil UseAuthorization dan apakah IAuthorizationHandlerProvider dapat terdeteksi di penyedia layanan. IAuthorizationHandlerProvider ditambahkan secara default saat menggunakan AddAuthorization, dan layanan terdeteksi menggunakan IServiceProviderIsService.
  • Middleware dan titik akhir yang dikonfigurasi pengguna ditambahkan antara UseRouting dan UseEndpoints.

Kode berikut secara efektif adalah apa yang ditambahkan middleware otomatis ke aplikasi:

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 => {});

Dalam beberapa kasus, konfigurasi middleware default tidak benar untuk aplikasi dan memerlukan modifikasi. Misalnya, UseCors harus dipanggil sebelum UseAuthentication dan UseAuthorization. Aplikasi perlu memanggil UseAuthentication dan UseAuthorization jika UseCors dipanggil:

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

Jika middleware harus dijalankan sebelum pencocokan rute terjadi, UseRouting harus dipanggil dan middleware harus ditempatkan sebelum panggilan ke UseRouting. UseEndpoints tidak diperlukan dalam kasus ini karena ditambahkan secara otomatis seperti yang dijelaskan sebelumnya:

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

app.UseRouting();

// other middleware and endpoints

Saat menambahkan middleware terminal:

  • Middleware harus ditambahkan setelah UseEndpoints.
  • Aplikasi perlu memanggil UseRouting dan UseEndpoints sehingga middleware terminal dapat ditempatkan di lokasi yang benar.
app.UseRouting();

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

app.UseEndpoints(e => {});

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

Middleware terminal adalah middleware yang berjalan jika tidak ada titik akhir yang menangani permintaan.

Untuk informasi tentang middleware antiforgery di API Minimal, lihat Mencegah serangan Pemalsuan Permintaan Lintas Situs (XSRF/CSRF) di ASP.NET Core

Untuk informasi selengkapnya tentang middleware, lihat ASP.NET Core Middleware, dan daftar middleware bawaan yang dapat ditambahkan ke aplikasi.

Untuk informasi selengkapnya tentang API Minimal, lihat Minimal APIs overview.