HttpModules được cấu hình qua web.config hoặc global.asax. Nhà phát triển không kiểm soát thứ tự thực thi.
Vì thứ tự các module chủ yếu dựa trên sự kiện vòng đời ứng dụng. Thứ tự thực thi giữ nguyên cho cả yêu cầu và phản hồi.
HttpModules giúp bạn gắn code đặc thù cho sự kiện ứng dụng. HttpModules gắn liền với System.web.
Middleware được cấu hình trong code Startup.cs thay vì tệp web.config (điểm vào ứng dụng)
Khác với HttpModules, có toàn quyền kiểm soát gì được thực thi và theo thứ tự nào. Vì chúng được thực thi theo thứ tự được thêm vào.
Thứ tự middleware cho phản hồi là ngược lại so với yêu cầu.
Middleware độc lập với các sự kiện này.
Middlewares độc lập với host (host independent).
Middleware tích hợp sẵn của ASP.NET Core
Authentication − Cung cấp hỗ trợ xác thực.
CORS − Cấu hình Chia Sẻ Tài Nguyên Gốc Chéo (Cross-Origin Resource Sharing).
Routing − Định nghĩa và ràng buộc tuyến yêu cầu.
Session − Cung cấp hỗ trợ quản lý phiên người dùng.
Diagnostics − Bao gồm hỗ trợ trang lỗi và thông tin runtime.
Ví Dụ
public class MyMiddleware{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public MyMiddleware(RequestDelegate next, ILoggerFactory logFactory){
_next = next;
_logger = logFactory.CreateLogger("MyMiddleware");
}
public async Task Invoke(HttpContext httpContext){
_logger.LogInformation("MyMiddleware executing..");
await _next(httpContext); // gọi middleware tiếp theo
}
}
// Phương thức mở rộng dùng để thêm middleware vào pipeline yêu cầu HTTP.
public static class MyMiddlewareExtensions{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder
builder){
return builder.UseMiddleware<MyMiddleware>();
}
}
// thêm custom middleware vào request pipeline bằng phương thức mở rộng Use như sau
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.UseMiddleware<MyMiddleware>()
app.Run(async (context) =>{
await context.Response.WriteAsync("Hello World!");
});
}