iT邦幫忙

2022 iThome 鐵人賽

DAY 4
1

官方文件
Middleware組成的Pipeline處理所有的Request及Response(取代Http Moudles以及HTTP Handlers)

Middleware一個接一個,每個Middleware都可以選擇是否將Request傳遞給下一個Middleware,並在下一個Middleware前後執行工作。

Middleware

https://ithelp.ithome.com.tw/upload/images/20220919/20152200udbTDejUHH.png

  • 位於requestor和 target之間。
  • 可以直接改Response。
  • 可以留下log。
  • 可以使用Request中的data來產生Response。

後進先出(LIFO)

Middleware執行順序:

  • Request 過程是由上往下
  • Response 過程是由下往上

https://ithelp.ithome.com.tw/upload/images/20220919/20152200lTQCrssPNq.png

Use

可以自訂程式碼來定義 Middleware 也可以利用next的呼叫決定是否要進入下個Middleware

if (app.Environment.IsDevelopment())
{
    app.Use(async (context, next) => {
        await context.Response.WriteAsync($"11111{Environment.NewLine}");
        await next();
        await context.Response.WriteAsync($"22222{Environment.NewLine}");
    });
    app.Run(async context => {
        await context.Response.WriteAsync($"33333{Environment.NewLine}");
    });
}

結果如下
https://ithelp.ithome.com.tw/upload/images/20220919/20152200VcW727lMEZ.png

Run

Run 為最末端的行為,也無法像Use使用next串聯Middleware,通常被稱為終端委託,執行完第一個會直接結束Middleware。

if (app.Environment.IsDevelopment())
{
    app.Run(async context => {
        await context.Response.WriteAsync($"111111{Environment.NewLine}");
    });
    app.Run(async context => {
        await context.Response.WriteAsync($"22222{Environment.NewLine}");
    });
}

結果如下
https://ithelp.ithome.com.tw/upload/images/20220919/20152200kNN54sAOtZ.png

Map

Map用於分支Pipeline,Map 會依據指定相符的請求路徑請求Pipeline。如果請求路徑以給定路徑開始,則執行分支。

app.Map("/111111", One);
app.Map("/222222", Two);
app.Run();
static void One(IApplicationBuilder app)
{
    app.Run(async context => {
        await context.Response.WriteAsync($"You are 111111{Environment.NewLine}");
    });
}
static void Two(IApplicationBuilder app)
{
    app.Run(async context => {
        await context.Response.WriteAsync($"You are 222222{Environment.NewLine}");
    });
}

結果如下
https://localhost:7056/111111
https://ithelp.ithome.com.tw/upload/images/20220919/20152200vbMQfwBIni.png
https://localhost:7056/222222
https://ithelp.ithome.com.tw/upload/images/20220919/201522009JaGDCZpNI.png


參考資料

那今天就到這邊囉,大家明天見!


上一篇
[Day03]-概觀&應用程式啟動
下一篇
[Day05]-自定義 Middleware
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言