در ASP.NET Core مفاهیم HttpModules و HttpHandlers و جود ندارد و بجای آنها از ASP.NET Core Middleware استفاده می شود. قبل از
اینکه ASP.NET Core Middleware شرح دهیم، اجازه دهید نحوه کار HttpModules و HttpHandlers را بررسی کنیم.
در ASP.NET MVC و ASP.NET Webform، HttpHandlers و HttpModules، Pipeline درخواست را تشکیل می دهند.
Handlers:
1. کلاس های پیاده سازی شده از IHttpHandler هستند.
2. فایل های با نوع .report را مدیریت می
کنند.
3. در Web.config پیکربندی می
شوند.
Modules:
1. برای هر درخواست فراخوانی می شوند.
2. باعث قطع ادامه پردازش های یک درخواست می شوند.
3. قادر به تغییر پاسخ HTTP هستند.
4. در Web.config پیکربندی می شوند.
ترتیب پردازش ماژول ها در درخواست ها:
1. بر اساس چرخه زندگی برنامه
(Application Life cycle) است، که یکسری از رویدادهای صادر شده از APS.NET می
باشد (رویدادها مثل BeginRequest، AuthenticateRequest و غیره). هر ماژول می تواند برای یک یا چند
رویداد یک handler ایجاد کند.
2. برای رویدادهای یکسان در Web.config پیکربندی انجام می گیرد.
همچنین در
Global.asax.cs می
توان handlerهایی را برای چرخه زندگی نرم افزار به ماژول
ها اضافه کرد. این handlerها بعد از handlerهای پیکربندی شده اجرا می شوند.
Middleware:
Middleware مفهومی ساده تر از Modules و Handlers است:
1. نقش هر دوی HttpModules و HttpHandlers توسط Middleware صورت می گیرد.
2. Middleware با استفاده از کد پیکربندی می شود بجای
پیکربندی در Web.config
یک Middleware چیزی نیست جز
یک کامپوننت (Class) که در هر درخواست از برنامه ASP.NET Core اجرا می شود.
معمولا در
برنامه های ASP.NET Core چندین Middleware وجود دارد. می توانیم ترتیب اجرای Middleware ها را در هر Pipeline مشخص کنیم. همچنین هر Middleware می تواند
درخواست HTTP را تغییر دهد و یا آن را به Middleware بعدی پاس دهد.
شکل زیر نمایش دهنده یک Pipeline است.
می
توان Middlewareها را در متد Configure کلاس Startup با
استفاده از نمونه IApplicationBuilder پیکربندی کرد. برای مثال
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Startup
{
public Startup()
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//configure middleware using IApplicationBuilder here..
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
|
تفاوت ASP.NET Core Middleware و HttpModules:
1. ترتیب پردازش در ASP.NET Core Middleware و HttpModules متفاوت است:
- - ترتیب پردازش در ASP.NET Core Middleware بر اساس ترتیب قرارگیری Middleware ها در Pipline درخواست است، اما در HttpModules به چرخه حیات رویدادهای برنامه بستگی دارد.
- - ترتیب پاسخ Middlewareها در ASP.NET Core Middleware برعکس درخواست آنهاست، اما در HttpModules ترتیب درخواست و پاسخ یکسان است.
2. ASP.NET Core Middleware از هاست مستقل است اما HttpModules به System.web وابسته است.
3. Middlewareها از هر رویدادی مستقل هستند اما HttpModules وابسته به رویدادهای برنامه است.
4. ASP.NET Core Middleware از طریق کد پیکربندی می شود اما HttpModules از طریق web.config و global.ascx
منابع
Migrate HTTP handlers and modules to ASP.NET Core middleware
ASP.NET Core - Middleware
How ASP.NET Core 1.0 Middleware is different from HttpModule