ASP.NET Core - 中介軟體



本章將講解如何設定中介軟體。ASP.NET Core 中的中介軟體控制應用程式如何響應 HTTP 請求。它還可以控制應用程式在發生錯誤時的外觀,並且是驗證和授權使用者執行特定操作的關鍵部分。

  • 中介軟體是組裝到應用程式管道中的軟體元件,用於處理請求和響應。

  • 每個元件都會選擇是否將請求傳遞給管道中的下一個元件,並且可以在呼叫管道中的下一個元件之前和之後執行某些操作。

  • 請求委託用於構建請求管道。請求委託處理每個 HTTP 請求。

  • ASP.NET Core 中的每個中介軟體都是一個物件,每個中介軟體都具有非常具體、集中和有限的作用。

  • 最終,我們需要許多中介軟體才能使應用程式正常執行。

現在讓我們假設我們想要將有關每個請求的資訊記錄到我們的應用程式中。

  • 在這種情況下,我們可能安裝到應用程式中的第一個中介軟體是日誌記錄元件。

  • 此日誌記錄器可以看到有關傳入請求的所有資訊,但日誌記錄器很可能只會記錄一些資訊,然後將此請求傳遞給下一個中介軟體。

Middleware
  • 中介軟體是此處理管道中的一系列元件。

  • 我們安裝到應用程式中的下一個中介軟體是授權器。

  • 授權器可能會在 HTTP 標頭中查詢特定的 Cookie 或訪問令牌。

  • 如果授權器找到令牌,則允許請求繼續。如果沒有,授權器本身可能會使用 HTTP 錯誤程式碼或重定向程式碼來響應請求,將使用者傳送到登入頁面。

  • 否則,授權器將請求傳遞給下一個中介軟體,即路由器。

  • 路由器檢視 URL 並確定您的下一步操作。

  • 路由器檢視應用程式是否有要響應的內容,如果路由器找不到要響應的內容,路由器本身可能會返回一個404 未找到錯誤

示例

現在讓我們來看一個簡單的例子來進一步瞭解中介軟體。我們使用Startup 類的 Configure 方法在 ASP.NET 中設定中介軟體。

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Hosting; 
using Microsoft.AspNet.Http; 

using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.Configuration;  

namespace FirstAppDemo { 
   public class Startup { 
      public Startup() { 
         var builder = new ConfigurationBuilder() 
            .AddJsonFile("AppSettings.json"); 
         Configuration = builder.Build(); 
      }  
      public IConfiguration Configuration { get; set; }  
       
      // This method gets called by the runtime. 
      // Use this method to add services to the container. 
      // For more information on how to configure your application, 
      // visit http://go.microsoft.com/fwlink/?LinkID=398940 
      public void ConfigureServices(IServiceCollection services) { 
      }  
      
      // This method gets called by the runtime.  
      // Use this method to configure the HTTP request pipeline. 
      public void Configure(IApplicationBuilder app) { 
         app.UseIISPlatformHandler();  
         
         app.Run(async (context) => { 
            var msg = Configuration["message"]; 
            await context.Response.WriteAsync(msg); 
         });  
      }  
      // Entry point for the application. 
      public static void Main(string[] args) => WebApplication.Run<Startup>(args); 
   } 
} 

Configure()方法中,我們將對 IApplicationBuilder 介面呼叫擴充套件方法來新增中介軟體。

預設情況下,新的空專案中有兩個中介軟體:

  • IISPlatformHandler
  • 使用 app.Run 註冊的中介軟體

IISPlatformHandler

IISPlatformHandler允許我們使用 Windows 身份驗證。它將檢視每個傳入請求,並檢視是否有任何與該請求關聯的 Windows 身份資訊,然後呼叫下一個中介軟體。

使用 app.Run 註冊的中介軟體

在這種情況下,下一個中介軟體是用app.Run註冊的中介軟體。Run 方法允許我們傳入另一個方法,我們可以使用它來處理每個響應。Run 不是經常看到的東西,我們稱之為終端中介軟體。

使用 Run 註冊的中介軟體將永遠沒有機會呼叫另一箇中間件,它所做的只是接收請求,然後必須生成某種響應。

您還可以訪問 Response 物件,您可以使用 Response 物件執行的操作之一是寫入字串。

如果您想在 app.Run 之後註冊另一箇中間件,則永遠不會呼叫該中介軟體,因為 Run 是終端中介軟體。它永遠不會呼叫下一個中介軟體。

如何新增另一箇中間件

讓我們按照以下步驟新增另一箇中間件:

步驟 1 - 要新增另一箇中間件,請右鍵單擊專案並選擇“管理 NuGet 包”。

步驟 2 - 搜尋Microsoft.aspnet.diagnostics,它實際上是用於異常處理、異常顯示頁面和診斷資訊的 ASP.NET Core 中介軟體。此特定包包含我們可以使用的許多不同的中介軟體。

Microsoft AspNet Diagnostics

步驟 3 - 如果專案中未安裝該包,請安裝它。

步驟 4 - 現在讓我們轉到Configure()方法並呼叫app.UseWelcomePage中介軟體。

// This method gets called by the runtime.  
// Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app) { 
   app.UseIISPlatformHandler(); 
   app.UseWelcomePage();  
   
   app.Run(async (context) => { 
      var msg = Configuration["message"]; 
      await context.Response.WriteAsync(msg); 
   });  
}

步驟 5 - 執行您的應用程式,您將看到以下歡迎螢幕。

Welcome Screen

此歡迎螢幕可能不太有用。

步驟 6 - 讓我們嘗試一些可能更有用的東西。我們將使用RuntimeInfoPage,而不是使用歡迎頁面。

// This method gets called by the runtime.  
// Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app) { 
   app.UseIISPlatformHandler(); 
   app.UseRuntimeInfoPage();  
   
   app.Run(async (context) => { 
      var msg = Configuration["message"]; 
      await context.Response.WriteAsync(msg); 
   });  
}

步驟 7 - 儲存您的Startup.cs頁面並重新整理瀏覽器,您將看到以下頁面。

Startup CS

RuntimeInfoPage是一箇中間件,它只響應針對特定 URL 的請求。如果傳入請求與該 URL 不匹配,則此中介軟體只會讓請求傳遞到下一個中介軟體。請求將透過 IISPlatformHandler 中介軟體,然後轉到 UseRuntimeInfoPage 中介軟體。它不會建立響應,因此它將轉到我們的 app.Run 並顯示字串。

步驟 8 - 讓我們在 URL 的末尾新增“/runtimeinfo”。您現在將看到由該執行時資訊頁面中介軟體生成的頁面。

Runtime Information

您現在將看到一個響應,其中提供了有關執行時環境的一些資訊,例如作業系統、執行時版本、體系結構、型別以及您正在使用的所有包等。

廣告
© . All rights reserved.