Middleware (Phần mềm trung gian) trong ứng dụng Minimal API
Bài viết này mô tả cách sử dụng middleware trong ứng dụng Minimal API. Bạn có thể tận dụng automatic middleware (middleware tự động) trong ứng dụng Minimal API, hoặc định nghĩa user-configured middleware (middleware do người dùng cấu hình) và terminal middleware (middleware kết thúc).
Middleware có sẵn
WebApplication tự động thêm các middleware sau vào ứng dụng Minimal API tùy theo một số điều kiện nhất định:
UseDeveloperExceptionPageđược thêm trước tiên khiHostingEnvironmentlà"Development".UseRoutingđược thêm thứ hai, nếu code người dùng chưa gọiUseRoutingvà có endpoints (điểm cuối) được cấu hình, ví dụapp.MapGet.UseEndpointsđược thêm ở cuối pipeline (đường ống) middleware nếu có endpoints được cấu hình.UseAuthenticationđược thêm ngay sauUseRouting, nếu code người dùng chưa gọiUseAuthenticationvàIAuthenticationSchemeProvidercó thể được phát hiện trong service provider (nhà cung cấp dịch vụ).IAuthenticationSchemeProviderđược thêm mặc định khi dùngAddAuthentication, và services được phát hiện bằngIServiceProviderIsService.UseAuthorizationđược thêm tiếp theo, nếu code người dùng chưa gọiUseAuthorizationvàIAuthorizationHandlerProvidercó thể được phát hiện trong service provider.IAuthorizationHandlerProviderđược thêm mặc định khi dùngAddAuthorization, và services được phát hiện bằngIServiceProviderIsService.- Middleware và endpoints do người dùng cấu hình được thêm vào giữa
UseRoutingvàUseEndpoints.
Đoạn code sau đây hiệu quả là những gì automatic middleware được thêm vào ứng dụng tạo ra:
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// Middleware/endpoints của người dùng
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// Kết thúc middleware/endpoints của người dùng
app.UseEndpoints(e => {});Trong một số trường hợp, cấu hình middleware mặc định không phù hợp với ứng dụng và cần chỉnh sửa. Ví dụ, UseCors phải được gọi trước UseAuthentication và UseAuthorization. Ứng dụng cần gọi UseAuthentication và UseAuthorization nếu UseCors được gọi:
app.UseCors(); app.UseAuthentication(); app.UseAuthorization();
Nếu middleware cần chạy trước khi route matching (khớp tuyến đường) xảy ra, UseRouting phải được gọi và middleware phải được đặt trước lệnh gọi UseRouting. UseEndpoints không cần thiết trong trường hợp này vì nó được tự động thêm vào như đã mô tả trước đó:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// Các middleware và endpoints khácKhi thêm terminal middleware:
- Middleware phải được thêm sau
UseEndpoints. - Ứng dụng cần gọi
UseRoutingvàUseEndpointsđể terminal middleware có thể được đặt ở đúng vị trí.
app.UseRouting();
app.MapGet("/", () => "hello world");
app.UseEndpoints(e => {});
app.Run(context =>
{
context.Response.StatusCode = 404;
return Task.CompletedTask;
});Terminal middleware là middleware chạy nếu không có endpoint nào xử lý request (yêu cầu).
Để biết thông tin về antiforgery middleware (middleware chống giả mạo) trong Minimal APIs, hãy xem Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core.