Asp.Net Core-中介軟體
在這一章,我們將瞭解如何設定中介軟體。中介軟體技術在 ASP.NET Core中控制我們的應用程式如何響應 HTTP 要求。它還可以控制應用程式的異常錯誤,這是一個在如何進行身分識別驗證和授權使用者執行特定的操作的關鍵。
中介軟體是組裝成應用的管道來處理請求和響應的軟體組件。
每個組件可以選擇是否要在管道中將請求傳遞到下一個組件,並可以在管道中執行某些操作之前和之後的任務。
Request委託用於構建請求管道。Request委託用來處理每個HTTP請求。
每件中介軟體在 ASP.NET Core都是一個對象,並且每一塊有非常具體、 專註和有限的作用。
最終,我們需要很多的中介軟體為應用程式提供適當的行為。
現在讓我們假設我們想將每個對我們應用程式的請求都記錄日誌。
在這種情況下,我們安裝到應用程式中的第一塊中介軟體是一個日誌組件。
這個日誌程式可以看到一切傳入的請求,然後該中介軟體只是記錄一些資訊,然後傳遞這個請求下一個塊中介軟體。
中介軟體是以一系列的組件出現在這個處理管道中。
我們安裝到應用程式的下一個中介軟體是一個授權組件。
一個組件可能是尋找特定cookie或訪問HTTP標題中的令牌。
如果授權組件發現一個令牌,它允許請求繼續。
如果不是,授權組件本身可能會響應請求的HTTP錯誤碼或將使用者重新導向到登入頁面。
否則,授權組件將請求傳遞給下一個路由器的中介軟體。
一個路由器查看URL,並確定下一步的行動。
路由器是在做一些回應,如果路由器沒有找到任何回應,路由器本身可能會返回404 Not Found錯誤。
案例
現在讓我們通過一個簡單的例子來理解更多關於中介軟體的知識。我們通過使用我們的啟動類的Configure方法來配置中介軟體組件。
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
IISPlatformHandler允許我們使用Windows身分識別驗證。它將著眼於每個傳入請求,看看是否有任何Windows身份資訊相關的請求,然後調用下一個塊中介軟體。
Middleware registered with app.Run
在這種情況下一個中介軟體在app.Run中註冊的中介軟體。Run方法允許我們傳入另一種方法,我們可以使用它來處理每一個響應。Run方法不是你經常會看到的,我們可以稱它為一個中介軟體的終端。
你註冊啟動並執行中介軟體將永遠不會有機會調用另一個中介軟體,它唯一能做的就是接收請求,便要產生某種反應。
你也訪問到一個響應對象,你可以在響應對象中添加一些字串。
如果你想在app.Run之後註冊另一個中介軟體,這段中介軟體將永遠不會被調用,因為Run方法是一個中介軟體的終端。它不會調用下一個塊中介軟體。
如何添加一個中介軟體
讓我們著手進行以下步驟來添加另一個中介軟體 −
步驟1−按右鍵項目並選擇Manage NuGet Packages。
步驟2−搜尋 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 − 運行您的應用程式,您將看到以下的歡迎畫面。
這個歡迎畫面可能不是那麼有用。
步驟6−讓我們試試別的東西,可能是更有用的,而不是使用歡迎頁面,我們將使用RuntimeInfoPage。
1 // This method gets called by the runtime. 2 // Use this method to configure the HTTP request pipeline. 3 public void Configure(IApplicationBuilder app) { 4 app.UseIISPlatformHandler(); 5 app.UseRuntimeInfoPage(); 6 7 app.Run(async (context) => { 8 var msg = Configuration["message"]; 9 await context.Response.WriteAsync(msg); 10 }); 11 }
第 7 步 − 儲存您的 Startup.cs 頁面並重新整理您的瀏覽器,你會看到下面的頁面。
這個 RuntimeInfoPage 是中介軟體,將只響應一個特定的 URL 的請求。如果傳入的請求與該 URL 不匹配,這個中介軟體只是讓請求傳遞到下一件中介軟體。該請求將通過 IISPlatformHandler 中介軟體,然後轉到 UseRuntimeInfoPage 中介軟體。它不會建立響應,所以它會轉到我們的應用程式。運行並顯示該字串。
步驟8−我們在URL結尾添加“ runtimeinfo”。現在,您將看到一個頁面,該頁面是由中介軟體運行時資訊頁面。
你將看到一個返回頁面,它給你展示了一些關於你的運行時環境,如作業系統、運行時版本,結構,類型和您正在使用的所有包的資訊。