()app.Run
این کامپوننت middleware می تواند
طراحی اپلیکیشن در مشهد متدهایRun[Middleware] ها را که در انتهای خط لوله اعمال میشوند، نماد دهد. به طورکلی، تحت عنوان یک terminal middleware کار می نماید و در انتهای فرایند پردازش درخواست ((request pipeline اضافه می گردد، چون نمی تواند middleware آینده را فراخوانی نماید.
()app.Use
app.Use() برای تنظیمات multiple middleware استعمال می گردد. مغایر ()app.Run، ما خواهیم توانست پارامتر آتی را درآن قراردهیم، که درخواست delegate آینده را در pipeline فراخوانی می نماید. ما همینطور میتوانیم pipeline را با فراخوانی نکردن پارامتربعدی، اتصال کوتاه (terminate) کنیم.
نمونه زیربا app.Use() وapp.Run() را پژوهش نمایید وهمچنین output/response را ملاحظه کنید:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use(async (context, next) =>
{
await context.Response.WriteAsync(\"Before Invoke from 1st app.Use()\\n\");
await next();
await context.Response.WriteAsync(\"After Invoke from 1st app.Use()\\n\");
});
app.Use(async (context, next) =>
{
await context.Response.WriteAsync(\"Before Invoke from 2nd app.Use()\\n\");
await next();
await context.Response.WriteAsync(\"After Invoke from 2nd app.Use()\\n\");
});
app.Run(async (context) =>
{
await context.Response.WriteAsync(\"Hello from 1st app.Run()\\n\");
});
// the following will never be executed
app.Run(async (context) =>
{
await context.Response.WriteAsync(\"Hello from 2nd app.Run()\\n\");
});
}
اولی app.Run()،pipeline را خاتمه میدهد. دراین نمونه، تنها delegate اولیه (“Hello from 1st app.Run()”) انجام میگردد و request هیچوقت به Run method دوم نمیرسد.
()app.Map
این اکستنشن ها تحت عنوان قراردادی برای سیستم چندخطی pipeline به کارگیری میشوند. map پروسه پردازش درخواست را براساس مسیر درخواست بسط میدهد. درصورتیکه مسیر درخواست با مسیر داده گردیده آغاز گردد، شاخه تازه ازMiddleware ها انجام گردد. در واقعیت شما میتوانید پروسه پردازش درخواست را به چندین شاخه تقسیم نمائید که مبنی بر مسیر درخواست، هر کدام از این شاخه ها ممکن میباشد جاری ساختن شوند.
نمونه پایین را با app.Map() رسیدگی نمائید وهمچنین output/response را ملاحظه کنید:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Map(\"/m1\", HandleMapOne);
app.Map(\"/m2\", appMap => {
appMap.Run(async context =>
{
await context.Response.WriteAsync(\"Hello from 2nd app.Map()\");
});
});
app.Run(async (context) =>
{
await context.Response.WriteAsync(\"Hello from app.Run()\");
});
}
private static void HandleMapOne(IApplicationBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync(\"Hello from 1st app.Map()\");
});
}
جدول ذیل درخواست ها و جواب های localhost را با به کارگیری از کد بالا آرم میدهد.