Middleware (phần mềm trung gian) trong ứng dụng Minimal API
Bài viết này mô tả cách dùng middleware trong các ứng dụng Minimal API. Tận dụng middleware tự động trong ứng dụng Minimal API, hoặc định nghĩa middleware do người dùng cấu hình và terminal middleware (middleware đầu cuối).
Middleware có sẵn (Available Middleware)
WebApplication tự động thêm middleware sau đây trong các ứng dụng Minimal API tùy theo điều kiện nhất định:
UseDeveloperExceptionPageđược thêm đầu tiên khiHostingEnvironment(môi trường hosting) là"Development".UseRoutingđược thêm thứ hai nếu code người dùng chưa gọiUseRoutingvà có endpoint được cấu hình, ví dụapp.MapGet.UseEndpointsđược thêm cuối pipeline middleware nếu có endpoint được cấu hình.UseAuthenticationđược thêm ngay sauUseRoutingnếu code người dùng chưa gọiUseAuthenticationvà nếuIAuthenticationSchemeProvidercó thể được phát hiện trong service provider.IAuthenticationSchemeProviderđược thêm mặc định khi dùngAddAuthentication, và các service được phát hiện dùngIServiceProviderIsService.UseAuthorizationđược thêm tiếp theo nếu code người dùng chưa gọiUseAuthorizationvà nếuIAuthorizationHandlerProvidercó thể được phát hiện trong service provider.IAuthorizationHandlerProviderđược thêm mặc định khi dùngAddAuthorization, và các service được phát hiện dùngIServiceProviderIsService.- Middleware và endpoint do người dùng cấu hình được thêm giữa
UseRoutingvàUseEndpoints.
Code sau là những gì middleware tự động được thêm vào ứng dụng sẽ tạo ra:
if (isDevelopment)
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
if (isAuthenticationConfigured)
{
app.UseAuthentication();
}
if (isAuthorizationConfigured)
{
app.UseAuthorization();
}
// Middleware/endpoint của người dùng
app.CustomMiddleware(...);
app.MapGet("/", () => "hello world");
// Kết thúc middleware/endpoint 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 sửa đổi. Ví dụ, UseCors nên đượ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 nên chạy trước khi route matching (khớp tuyến đường) xảy ra, UseRouting nên được gọi và middleware nên được đặt trước lời gọi UseRouting. UseEndpoints không cần thiết trong trường hợp này vì nó được thêm tự động:
app.Use((context, next) =>
{
return next(context);
});
app.UseRouting();
// Middleware và endpoint khácKhi thêm terminal middleware (middleware đầu cuối):
- 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.
Để biết thêm về antiforgery middleware (middleware chống giả mạo) trong Minimal APIs, xem Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core.