HttpModules (ASP.NET Classic):
web.configবাglobal.asaxদিয়ে কনফিগার করা হয়।- ডেভেলপারের এক্সিকিউশন অর্ডার ওপর কন্ট্রোল নেই।
- অর্ডার মূলত অ্যাপ্লিকেশন লাইফসাইকেল ইভেন্টের ওপর ভিত্তি করে। রিকোয়েস্ট এবং রেসপন্সের এক্সিকিউশন অর্ডার একই থাকে।
- অ্যাপ্লিকেশন ইভেন্ট-স্পেসিফিক কোড আটাচ করতে সাহায্য করে।
System.Web-এ বাঁধা (tied)।
Middleware (ASP.NET Core):
Startup.cs-এ কোড দিয়ে কনফিগার করা হয় (web.config না, এন্ট্রি পয়েন্ট)।- পূর্ণ কন্ট্রোল: কী এক্সিকিউট হবে এবং কোন অর্ডারে—যে অর্ডারে অ্যাড করা হয়ে থাকে সেটাই এক্সিকিউশন অর্ডার।
- রেসপন্সের জন্য মিডলওয়্যার অর্ডার রিকোয়েস্টের বিপরীত (রিভার্স) होता है।
- লাইফসাইকেল ইভেন্ট থেকে স্বাধীন।
- হোস্ট-ইনডিপেন্ডেন্ট (Kestrel, IIS, Docker, ইত্যাদি)।
বিল্ট-ইন মিডলওয়্যার (ASP.NET Core)
- Authentication: অথেন্টিকেশন সাপোর্ট।
- CORS: Cross-Origin Resource Sharing কনফিগারেশন।
- Routing: রিকোয়েস্ট রুট ডিফাইন ও কনস্ট্রেইন।
- Session: ইউজার সেশন ম্যানেজমেন্ট সাপোর্ট।
- Diagnostics: এরর পেজ এবং রানটাইম ইনফরমেশন সাপোর্ট।
কাস্টম মিডলওয়্যার উদাহরণ
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); // পরবর্তী মিডলওয়্যার কল
}
}
// এক্সটেনশন মেথড
public static class MyMiddlewareExtensions
{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<MyMiddleware>();
}
}
// পাইপলাইনে যোগ
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMiddleware<MyMiddleware>();
app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); });
}
মূল পার্থক্য সারসংক্ষেপ: মিডলওয়্যার মডুলার, কম্পোজেবল, অর্ডার-কন্ট্রোলযোগ্য, হোস্ট-অগ্নস্টিক এবং ASP.NET Core পাইপলাইনের 핵심 অংশ। HttpModule লিগ্যাসি, কনফিগ-বেইসড, লাইফসাইকেল-বাউন্ড এবং System.Web-ডিপেন্ডেন্ট।