Middleware trong ASP.NET Core là các thành phần phần mềm được kết nối với nhau thành một pipeline (chuỗi) để xử lý các yêu cầu HTTP. Mỗi middleware có thể xử lý yêu cầu, thực hiện các hành động và chuyển tiếp yêu cầu đến middleware tiếp theo trong pipeline. Middleware giúp quản lý các chức năng như xác thực, ghi log, xử lý lỗi, và các tác vụ khác một cách hiệu quả và linh hoạt.
Cách Sử Dụng Middleware Trong ASP.NET Core
-
Cấu Hình Middleware:
Để cấu hình middleware, bạn cần thêm chúng vào pipeline trong phương thức
Configure
của lớpStartup
. Các middleware được thêm vào theo thứ tự chúng được gọi và thứ tự này rất quan trọng vì nó xác định luồng xử lý yêu cầu.public class Startup { public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); } }
Trong ví dụ trên, các middleware như
UseDeveloperExceptionPage
,UseHttpsRedirection
,UseStaticFiles
,UseRouting
,UseAuthentication
, vàUseAuthorization
được thêm vào pipeline. -
Tạo Middleware Tùy Chỉnh:
Bạn có thể tạo middleware tùy chỉnh bằng cách tạo một lớp có phương thức
Invoke
hoặcInvokeAsync
và đăng ký nó trong pipeline.public class CustomMiddleware { private readonly RequestDelegate _next; public CustomMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { // Logic của middleware Console.WriteLine("Custom Middleware Executing"); // Gọi middleware tiếp theo trong pipeline await _next(context); // Logic sau khi middleware tiếp theo thực thi Console.WriteLine("Custom Middleware Executed"); } }
Đăng ký middleware tùy chỉnh trong phương thức
Configure
:public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseMiddleware<CustomMiddleware>(); // Các middleware khác app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
-
Sử Dụng Middleware Trong Pipeline:
Middleware có thể thực hiện các tác vụ trước và sau khi gọi middleware tiếp theo trong pipeline. Điều này cho phép bạn thực hiện các hành động như ghi log, xác thực, hoặc xử lý lỗi một cách hiệu quả.
public async Task InvokeAsync(HttpContext context) { // Thực hiện hành động trước khi gọi middleware tiếp theo Console.WriteLine("Request Incoming"); await _next(context); // Thực hiện hành động sau khi middleware tiếp theo hoàn thành Console.WriteLine("Response Outgoing"); }
Tổng Quan:
- Middleware: Là các thành phần xử lý yêu cầu HTTP theo một chuỗi trong ASP.NET Core.
- Pipeline: Thứ tự middleware trong pipeline xác định luồng xử lý yêu cầu và phản hồi.
- Middleware Tùy Chỉnh: Có thể tạo và đăng ký middleware tùy chỉnh để thực hiện các tác vụ đặc biệt.
Ví Dụ Thực Tế:
Dưới đây là một ví dụ minh họa về middleware tùy chỉnh để ghi log các yêu cầu và phản hồi HTTP:
public class LoggingMiddleware
{
private readonly RequestDelegate _next;
public LoggingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
Console.WriteLine($"Incoming request: {context.Request.Method} {context.Request.Path}");
await _next(context);
Console.WriteLine($"Outgoing response: {context.Response.StatusCode}");
}
}
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<LoggingMiddleware>();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Trong ví dụ này, middleware LoggingMiddleware
ghi log phương thức và đường dẫn của yêu cầu HTTP trước khi gọi middleware tiếp theo và ghi log mã trạng thái của phản hồi sau khi middleware tiếp theo hoàn thành.
Comments