Home >> Blog >> ASP.NET Core middleware 中介軟體簡介

ASP.NET Core middleware 中介軟體簡介

在本章中,我們將了解如何設置中介軟體。ASP.NET Core 中的中介軟體控制我們的SEO應用程式如何響應 HTTP 請求。它還可以控制我們的應用程式在出現錯誤時的外觀,它是我們如何驗證和授權用戶執行特定操作的關鍵部分。

  • 中介軟體是組裝到應用程式管道中以處理請求和響應的軟件組件。
  • 每個組件選擇是否將請求傳遞給管道中的下一個組件,並且可以在調用管道中的下一個組件之前和之後執行某些操作。
  • 請求委託用於構建請求管道。請求委託處理每個 HTTP 請求。
  • ASP.NET Core 中的每一塊中介軟體都是一個對象,每一塊都有一個非常具體、專注和有限的角色。
  • 最終,我們需要許多中介軟體才能使應用程式正常運行。

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

]
  • 在這種情況下,我們可能安裝到應用程式中的第一個中介軟體是日誌組件。
  • 該記錄器可以查看有關傳入請求的所有訊息,但記錄器可能只是記錄一些訊息,然後將此請求傳遞給下一個中介軟體。
    ASP.NET Core - 中介軟體

  • 中介軟體是此處理管道中存在的一系列組件。
  • 我們安裝到應用程式中的下一個中介軟體是授權器。
  • 授權者可能正在 HTTP 標頭中尋找特定的 cookie 或訪問令牌。
  • 如果授權者找到一個令牌,它就允許請求繼續進行。如果沒有,授權方本身可能會使用 HTTP 錯誤代碼或重定向代碼來響應請求,以將用戶發送到登錄頁面。
  • 但是,否則,授權者會將請求傳遞給下一個中介軟體,即路由器。
  • 路由器查看 URL 並確定您的下一步操作。
  • 路由器查看應用程式以查找要響應的內容,如果路由器沒有找到要響應的內容,路由器本身可能會返回404 Not Found 錯誤。

例子

現在讓我們舉一個簡單的例子來了解更多關於中介軟體的知識。我們使用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(args);
}
}

在Configure()方法中,我們將調用 IApplicationBuilder 接口上的擴展方法來添加中介軟體。

默認情況下,一個新的空項目中有兩個中介軟體 -

  • IIS 平台處理程式
  • 向 app.Run 註冊的中介軟體

IIS 平台處理程式

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

向 app.Run 註冊的中介軟體

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

你註冊到 Run 的中介軟體永遠不會有機會調用另一個中介軟體,它所做的只是接收一個請求,然後它必須產生某種響應。

您還可以訪問 Response 對象,並且您可以使用 Response 對像做的事情之一就是編寫一個字符串。

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

如何添加另一個中介軟體

讓我們繼續以下步驟來添加另一個中介軟體 -

第 1 步- 要添加另一個中介軟體,請右鍵單擊項目並選擇管理 NuGet 包。

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

ASP.NET Core - 中介軟體

Step 3 - 如果您的項目中未安裝該軟件包,請安裝該軟件包。

Step 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);
});
}

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

ASP.NET Core - 中介軟體

這個歡迎螢幕可能沒有那麼有用。

第 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頁面並刷新瀏覽器,您將看到以下頁面。

ASP.NET Core - 中介軟體

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

第 8 步- 讓我們在 URL 的末尾添加“/ runtimeinfo ”。您現在將看到由該運行時訊息頁面中介軟體生成的頁面。

ASP.NET Core - 中介軟體

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