آموزش پیاده سازی Middleware های سفارشی در ASP.NET Core
آموزش پیاده سازی Middleware های سفارشی در ASP.NET Core یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته آموزشی پیاده سازی Middleware Component های سفارشی در ASP.NET Core است که با نام اصلی Implementing Custom Middleware Components in ASP.NET Core از شرکت Pluralsight منتشر شده است.
Middleware سفارشی در ASP.NET Core
در فریم ورک ASP.NET Core یک middleware مسئول هندل کردن response ها و request ها در pipeline برنامه است. در واقع ASP.NET Core مجموعه ای غنی از middleware component های درونی را نیز ارائه می دهد، اما در برخی از سناریوها ممکن است بخواهید یک middleware سفارشی بنویسید.
استفاده کردن از یک کلاس برای پیاده سازی یک Middleware
در فریم ورک ASP.NET Core یک middleware معمولاً در یک کلاس کپسوله میشود و با یک روش توسعهای در معرض نمایش قرار میگیرد.

middleware زیر که به صورت inline نوشته شده است را در نظر بگیرید. در این middleware که culture مربوط به request فعلی را از درون یک query string دریافت می شود:
using System.Globalization;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpsRedirection();
app.Use(async (context, next) => {
var cultureQuery = context.Request.Query[“culture”];
if (!string.IsNullOrWhiteSpace(cultureQuery)) {
var culture = new CultureInfo(cultureQuery);
CultureInfo.CurrentCulture = culture;
CultureInfo.CurrentUICulture = culture;
} // Call the next delegate/middleware in the pipeline. await next(context); });
app.Run(async (context) => {
await context.Response.WriteAsync(
$” CurrentCulture.DisplayName: {
CultureInfo.CurrentCulture.DisplayName
}”);
});
app.Run();
ترتیب اجرای Middleware ها در ASP.NET Core
در ASP.NET Core، درخواست های HTTP از میان مجموعه ای از Middleware ها عبور می کنند که هر کدام می توانند بخشی از فرایند پردازش درخواست یا پاسخ را بر عهده بگیرند. ترتیب ثبت این اجزا در Pipeline اهمیت زیادی دارد، زیرا هر Middleware می تواند پیش از فراخوانی جزء بعدی عملیاتی انجام دهد یا پس از دریافت کنترل، پاسخ را تغییر دهد. درک این جریان برای توسعه دهندگانی ضروری است که می خواهند رفتار درخواست ها را به صورت دقیق کنترل کنند.
هنگام طراحی Middleware سفارشی، باید مشخص کنید که کامپوننت در چه مرحله ای از پردازش اجرا شود و آیا لازم است اجرای بخش های بعدی Pipeline را ادامه دهد یا متوقف کند. برای مثال، یک Middleware می تواند اطلاعات درخواست را ثبت کند و سپس پردازش را به اجزای بعدی بسپارد. شناخت نحوه کار `RequestDelegate` و متد `Invoke` یا `InvokeAsync` به شما کمک می کند رفتار Middleware های خود را با ساختار ASP.NET Core هماهنگ کنید.
پیاده سازی Middleware با متدهای Invoke و InvokeAsync
یکی از نکات مهم هنگام توسعه Middleware در ASP.NET Core، شناخت نحوه دریافت درخواست و انتقال آن به بخش بعدی Pipeline است. در پیاده سازی های متداول، متدی مانند `InvokeAsync` یک شیء از نوع `HttpContext` دریافت می کند و با استفاده از `RequestDelegate` امکان ادامه پردازش را فراهم می سازد. از طریق این ساختار می توانید اطلاعات درخواست را بررسی کنید، عملیات موردنیاز را انجام دهید و در صورت لزوم پیش از بازگشت پاسخ، رفتارهای تکمیلی اجرا کنید.

برای مثال، می توانید Middleware ای طراحی کنید که زمان شروع پردازش درخواست را ثبت کند و پس از پایان اجرای بخش های بعدی، مدت زمان سپری شده را محاسبه کند. چنین ساختاری نشان می دهد که Middleware تنها برای بررسی اولیه درخواست کاربرد ندارد و می تواند عملیات قبل و بعد از اجرای اجزای دیگر را نیز مدیریت کند. آشنایی با این الگوها به شما کمک می کند کامپوننت هایی بسازید که رفتارشان روشن باشد و در Pipeline برنامه به شکل قابل پیش بینی عمل کنند.
مهاجرت HTTP Modules و HTTP Handlers به ASP.NET Core
در برنامه های قدیمی مبتنی بر ASP.NET Framework، مفاهیمی مانند `HTTP Modules` و `HTTP Handlers` برای پردازش درخواست های HTTP استفاده می شدند. با انتقال برنامه به ASP.NET Core، مدل پردازش درخواست تغییر می کند و Middleware ها نقش مهمی در پیاده سازی رفتارهای مشابه بر عهده می گیرند. بنابراین، مهاجرت یک برنامه قدیمی فقط به انتقال کدها محدود نیست و باید بررسی شود که مسئولیت های مربوط به دریافت درخواست، اجرای منطق پردازش و تولید پاسخ چگونه در معماری جدید پیاده سازی شوند.
برای انجام این مهاجرت، ابتدا باید وظایف هر Module یا Handler مشخص شود و سپس مناسب ترین بخش از Pipeline برای پیاده سازی آن انتخاب شود. برخی رفتارها ممکن است به Middleware عمومی تبدیل شوند و برخی دیگر به قابلیت های موجود در چارچوب جدید وابسته باشند. آشنایی با تفاوت این دو مدل به توسعه دهندگان کمک می کند هنگام بازنویسی برنامه های قدیمی، ساختار جدید را بهتر درک کنند و از انتقال مستقیم الگوهای قدیمی بدون توجه به تفاوت های معماری جلوگیری کنند.
مدیریت خطا و ثبت اطلاعات در Middleware های سفارشی
Middleware های سفارشی می توانند در بخش های مختلفی از پردازش درخواست، مسئولیت هایی مانند ثبت اطلاعات یا مدیریت خطا را بر عهده بگیرند. برای مثال، یک Middleware می تواند اطلاعاتی درباره مسیر درخواست و زمان اجرای آن ثبت کند تا بررسی مشکلات برنامه ساده تر شود. همچنین، با قرار دادن یک Middleware مناسب در موقعیت درست Pipeline، می توان برخی خطاهای رخ داده در مراحل بعدی را دریافت و به شکل کنترل شده مدیریت کرد.
هنگام طراحی چنین کامپوننت هایی باید به ترتیب اجرای Middleware ها، نحوه انتقال استثناها و امکان تغییر پاسخ HTTP توجه داشته باشید. برای نمونه، اگر Middleware مدیریت خطا در جایگاه نامناسبی قرار بگیرد، ممکن است نتواند استثناهای بخش های موردنظر را دریافت کند. طراحی صحیح این بخش ها به شما کمک می کند رفتار برنامه در شرایط غیرمنتظره قابل پیش بینی تر باشد و اطلاعات لازم برای عیب یابی در اختیار تیم توسعه قرار بگیرد.
سرفصل مطالب آموزش ویدیویی پیاده سازی Middleware های سفارشی در ASP.NET Core
فصل اول: مقدمه این دوره آموزشی- مقدمه
- مقدمه
- استفاده و اجرا کردن متد ها در اضافه کردن Middleware
- استفاده کردن از Map و MapWhen برای ایجاد Branch ها
- ایجاد کردن Middleware Class ساده
- افزودن عملکرد به Middleware Component
- بررسی Middleware که با NET Core عرضه می شود
- مقایسه Handler ها و Module ها با Middleware
- Migrate کردن Handler ها و Module ها با Middleware
