1. 程式人生 > 其它 >Asp.NetCore Web應用程式中的請求管道和中介軟體

Asp.NetCore Web應用程式中的請求管道和中介軟體

你是否會迷惑當我們請求一個ASP.NetWeb應用程式以後,它是怎麼處理這些請求的,後臺是怎麼工作的,今天就講一下Asp.NetCore Web應用程式中的請求處理過程。

上一節,我們講到,Startup檔案中用來配置中介軟體(middleware),這個中介軟體就是用來處理請求的。那標題中的請求管道又是什麼呢,其實所有的中介軟體就組成了一個請求管道,我們的請求,到達ASP.NetWeb應用程式,就會被送到第一個中介軟體中,一個個的訪問,每個中介軟體都對請求進行處理,直到進行到最後一箇中間件原路返回處理結果,或者中途被某個中介軟體攔截直接返回處理結果。

這種中介軟體的訪問處理就像俄羅斯套娃一樣,一層層深入訪問,一層層返回結果。下面來看一下startup中的初始中介軟體都有哪些。

注意,中介軟體的順序也是有規律的。錯誤處理中介軟體的新增邏輯,總是第一位的,

 if (env.IsDevelopment()) { 
app.UseDeveloperExceptionPage();
} else {
  app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

Endpoints中介軟體總是在最後,它用於處理以上中介軟體都沒有捕獲到的情況,初始配置是返回homecontroller中的index方法,他是直接攔截並返回的,所以在它以後的中介軟體,總是得不到執行。

app.UseEndpoints(endpoints =>  {
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});

我們再回過頭來看這個方法宣告

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

如果在VS中開啟,你會發現它是“0references”,沒有引用那它是怎麼執行的呢,其實,我們不會手動去呼叫它,這個方法是交由CLR去呼叫的,我們可以看到負責新增中介軟體的引數是繼承了IApplicationBuilder這個介面的物件,所以很清楚的,我們瞭解到,這個類是負責Build Application 的,所以這個方法是參與到程式的生成期的,不是執行期的。

.NetCore為我們提供了一些必須的中介軟體,約定以Use開頭,我們可以直接去新增使用,下面簡單解釋一些常用中介軟體的作用:

app.UseHttpsRedirection();//負責重定向頁面
app.UseStaticFiles();//新增靜態檔案(wwwroot中的)
app.UseRouting();//對路由的支援
app.UseAuthorization();//負責授權

請求和響應,就是在請求管道中被中介軟體層層處理並返回的過程,下一節會演示一下如何自定義一箇中間件,我們可以通過自定義中介軟體處理邏輯來處理請求