آشنایی با Middleware در ASP.NET Core

Loading...
Middleware

 

آشنایی با Middleware در ASP.NET Core ؛ ASP.NET Core مفهوم جدیدی با نام میان افزار را معرفی کرد. میان افزار چیزی نیست جز کامپوننتی (کلاس) که در هر بار درخواست اپلیکیشن ASP.NET Core اجرا می شود. در ASP.NET  قدیمی، HttpHandler و HttpModule ها بخشی از کانال درخواست بودند. میان افزار شبیه به HttpHandler و HttpModule است که هر دو نیاز به پیکربندی دارند و در هر درخواست اجرا می شوند.

معمولا در هر اپلیکیشن وب ASP.NET Core چندین Middleware وجود خواهد داشت. این Middleware هم می تواند Middleware ارائه شده فریمورک باشد، هم از طریق NuGet اضافه شده باشد یا میان افزار سفارشی شما باشد. ما می توانیم ترتیب اجرای Middleware را در کانال درخواست تعیین کنیم. هر میان افزار درخواست http را اضافه کرده یا تغییر می دهد و به صورت اختیاری کنترل را به کامپوننت Middleware بعدی ارسال می کند. شکل زیر اجرای کامپوننت های میان افزار را نشان می دهد.

در تصویر زیر میتوانید عملکرد دقیق میان افزار را مشاهده کنید.

Middleware

میان افزارها کانال درخواست را می سازند. شکل زیر پردازش درخواست ASP.NET Core را نشان می دهد.

Middleware

Middleware در ASP.NET Core

پیکربندی میان افزار:

میان افزار را می توانیم با استفاده از نمونه IApplicationBuilder در متد configure کلاس Startup پیکربندی کنیم. مثال زیر یک میان افزار واحد را با استفاده از متد Run که در هر درخواست یک رشته “Hello World” برمی گرداند اضافه می کند.

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!");
              
        });

        // other code removed for clarity.. 
    }
}

در مثال بالا، Run() یک متد افزونه روی نمونه IApplicationBuilder است که پایانه میان افزار را به کانال درخواست اپلیکیشن اضافه می کند. میان افزار پیکربندی شده بالا برای هر درخواست یک پاسخ با یک رشته “Hello World” برمی گرداند.

بررسی بیشتر متد Run:

ما از متد افزونه Run برای اضافه کردن میان افزار استفاده کردیم. خط زیر امضای متد Run است:

public static void Run(this IApplicationBuilder app, RequestDelegate handler)

متد Run یک متد افزونه روی IApplicationBuilder است و پارامتری از RequestDelegate قبول می کند. RequestDelegate یک متد delegate است که درخواست را مدیریت می کند. خط زیر امضای RequestDelegate است.

public delegate Task RequestDelegate(HttpContext context);

همانطور که در بالا می بینید، متد Run یک متد را به عنوان پارامتر می پذیرد که باید امضای آن با RequestDelegate مطابقت داشته باشد. بنابراین، این متد باید پارامتر HttpContext را پذیرفته و Task برگرداند. پس به این ترتیب هم می توانیم یک عبارت لامبدا مشخص کنیم یا می توانیم یک تابع در متد Run مشخص کنیم. عبارت لامبدای مشخص شده در متد Run بالا شبیه مثال زیر است.

public class Startup
{
    public Startup()
    {
    } 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
         app.Run(MyMiddleware);
    }

    private Task MyMiddleware(HttpContext context) 
    {
        return context.Response.WriteAsync("Hello World! ");
    }
}

تابع MyMiddleware بالا غیرهمزمان (آسنکرون) است و به همین دلیل تا زمانی که کامل اجرا شود thread را بلاک می کند. بنابراین با استفاده از async و await آن را آسنکرون می کنیم تا عملکرد و مقیاس پذیری آن را بهبود ببخشیم.

// other code removed for clarity

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
     app.Run(MyMiddleware);
}

private async Task MyMiddleware(HttpContext context) 
{
    await context.Response.WriteAsync("Hello World! ");
}

به این ترتیب، قطعه کد بالا مشابه مثال زیر است.

app.Run(async context => await context.Response.WriteAsync("Hello World!") );

//or 

app.Run(async (context) =>
{
    await context.Response.WriteAsync("Hello World!"); 
});

خب به همین صورت ما می توانیم با استفاده از متد Run میان افزار را پیکربندی کنیم.

پیکربندی چندین میان افزار:

اغلب اوقات چندین کامپوننت میان افزار در اپلیکیشن ASP.NET Core وجود خواهد داشت که به صورت متوالی اجرا خواهند شد. متد Run یک میان افزار پایانی را اضافه می کند بنابراین نمی تواند میان افزار بعدی را فراخوانی کند چرا که خودش آخرین میان افزار در یک دنباله خواهد بود. کد زیر همیشه اولین متد Run را اجرا می کند و هرگز به متد Run بعدی نمی رسد.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World From 1st Middleware"); 
    });
    
    // the following will never be executed
    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World From 2nd Middleware"); 
    });
}

برای پیکربندی چندین میان افزار، از متد افزونه Use() استفاده می کنیم. این متد هم شبیه متد Run() است با این تفاوت که پارامتر next را هم وارد میکند تا میان افزار بعدی در دنباله را فراخوانی کند. مثال زیر را در نظر بگیرید.

مثال: ()Use

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.Use(async (context, next) =>
    {
        await context.Response.WriteAsync("Hello World From 1st Middleware!");

        await next();
    });

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World From 2nd Middleware"); 
    });
}

مثال بالا عبارت “Hello World From 1st Middleware!Hello World From 2nd Middleware! ” را در مرورگر نمایش می دهد.

بنابراین، از متد Use() برای پیکربندی چندین میان افزار به ترتیب دلخواه استفاده می کنیم.

<      پیشنهاد می شود   />آموزش ASP.NET Core

اضافه کردن Middleware از پیش تعریف شده از طریق NuGet:

ASP.NET Core یک فریمورک ماژولار است و می توانیم امکانات سمت سرور را به آن اضافه کنیم، برای این کار ما باید افزونه های مختلف را از طریق NuGet در اپلیکیشن خود نصب کنیم. افزونه های میان افزار بسیاری وجود دارد که می توانند در اپلیکیشن ما استفاده شوند.

موارد زیر برخی از میان افزارهای از پیش تعریف شده هستند.

 

میان افزارتوضیح
Authenticationپشتیبانی احراز هویت را اضافه می کند.
CORSاشتراک گذاری منابع با چندین منبع را پیکربندی می کند.
Routingقابلیت های مسیریابی در MVC یا وب فرم را اضافه می کند.
Sessionپشتیبانی برای session کاربر را اضافه می کند.
StaticFilesپشتیبانی برای ارائه فایل های استاتیک و مرور دایرکتوری را اضافه می کند.
Diagnosticsپشتیبانی برای گزارشگیری و مدیریت خطاها را اضافه می کند.

 

موافقید که نحوه استفاده از یکی از میان افزارها را با هم ببینیم؟ پس با ما باشید تا Middleware Diagnostics را بررسی کنیم.

Middleware Diagnostics:

میان افزار Diagnostics برای گزارش گیری و مدیریت خطاها در ASP.NET Core استفاده می شود و خطاهای مهاجرت Entity Framework Core را تشخیص می دهد.

Project.json را باز کرده و وابستگی Microsoft.AspNetCore.Diagnostics را در صورت موجود نبودن اضافه می کنیم. کمی صبر می کنیم تا ویژوال استودیو پکیج ها را بازیابی کند.

این پکیج شامل میان افزار و متدهای افزونه زیر برای آن است.

 

میان افزارمتد افزونهتوضیح
DeveloperExceptionPageMiddlewareUseDeveloperExceptionPage()خطاهای سنکرون و آسنکرون را از کانال ارتباطی گرفته و پاسخ های خطای HTML تولید می کند.
ExceptionHandleMiddlewareUseExceptionHandler()خطاها را می گیرد، آنها را گزارش می کند و در یک کانال ارتباطی جایگزین دوباره اجرا می کند.
StatusCodePagesMiddlewareUseStatusCodePages()با کدهای وضعیت بین ۴۰۰ و ۵۹۹ پاسخ ها را چک می کند.
WelcomePageMiddlewareUseWelcomePage()برای مسیر اصلی صفحه خوشامدگویی نمایش می دهد.

 

می توانیم متدهای افزونه Use مربوطه را فراخوانی کنیم تا میان افزار بالا را در متد Configure کلاس Startup استفاده کنیم.

حالا میان افزار welcomePage را اضافه می کنیم که صفحه خوشامدگویی را برای مسیر اصلی نمایش می دهد.

مثال: اضافه کردن میان افزار Diagnostics

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{   
    app.UseWelcomePage(); 
    //other code removed for clarity 
}

مثال بالا صفحه خوشامدگویی زیر را برای هر درخواست نمایش می دهد.

Middleware

به این ترتیب می توانیم از متدهای افزونه Use استفاده کنیم تا میان افزارهای مختلف را وارد کنیم.

در بخش بعدی یاد می گیریم که چطور قابلیت گزارش نویسی (logging) را در اپلیکیشن ASP.NET Core پیاده سازی کنیم.



avatar فاطمه زکایی

فاطمه زکایی هستم. فارغ التحصیل کارشناسی مهندسی نرم افزار، مدت سه سال هست که در زمینه توسعه اپلیکیشن های تحت وب و اندروید و همچنین تولید محتوای تخصصی برنامه نویسی تحت وب و اندروید در مجموعه mspsoft در خدمت شما هستم.

آخرین مطالب و تخفیفات در کانال تلگرام :) کانال تلگرام ام اس پی سافت
مطالب مرتبط
ديدگاه خود را ارسال کنيد


محبوب ترين ويدئو هاي انلاين
دوره برنامه نویسی فروشگاه اینترنتی
  • تعداد اعضا 80k
  • قيمت دوره۱۳۰,۰۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره آموزشی سیستم ثبت سفارش آنلاین
  • تعداد اعضا 80k
  • قيمت دوره--
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...
دوره طراحی سیستم مدیریت مشتریان
  • تعداد اعضا 80k
  • قيمت دوره۶۵,۵۰۰ تومان
  • امتيازدهي
    1 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 51 vote, average: 5٫00 out of 5( 5٫00 از 1 رای )
    Loading...