前面的教學已經有用到Middleware,但一直沒有補充細節
舉現實的例子來說,有點像去機場搭飛機,會先:
中介軟體就是像這樣層層把關的檢核點,而乘客就是互相傳遞的訊息,可以在前面過濾掉不歡迎的訪問
假設有三個中介軟體,那完整且沒有被中斷過程,從請求到回應,會像這樣:
請求-> Middleware 1-> Middleware 2-> Middleware 3 -> Middleware 2 -> Middleware 1->回應
那這邊可以注意到中介軟體的順序,就是處理訊息的順序,因此官方有推薦順序的安排
這些系統內建的功能,會自己呼叫next,去把訊息傳遞下去
// 強制使用安全的 HTTPS
app.UseHttpsRedirection();
app.UseStaticFiles();
// app.UseCookiePolicy();
// 用來解析 URL 路由資訊
app.UseRouting();
// app.UseRateLimiter();
// app.UseRequestLocalization();
// 處理跨域存取限制
// app.UseCors();
// 認證:你是誰
app.UseAuthentication();
// 授權:你能不能做這件事
app.UseAuthorization();
// app.UseSession();
// app.UseResponseCompression();
// app.UseResponseCaching();
app.MapRazorPages();
app.MapDefaultControllerRoute();
藉由next.Invoke()
把訊息傳遞下去,那前面範例內建的功能,已經先寫好這個行為,所以看不到這行指令
app.Use(async (context, next) =>
{
// Do work that can write to the Response.
await next.Invoke();
// Do logging or other work that doesn't write to the Response.
});
不知不覺已經到21天了,我覺得最大的收穫應該是,找回瞬間收心的專注力吧