ASP.NET Core中間件設(shè)置教程(7)
Asp.Net Core-中間件
在這一章,我們將了解如何設(shè)置中間件。中間件技術(shù)在 ASP.NET Core中控制我們的應(yīng)用程序如何響應(yīng) HTTP 請求。它還可以控制應(yīng)用程序的異常錯誤,這是一個在如何進行身份驗證和授權(quán)用戶執(zhí)行特定的操作的關(guān)鍵。
- 中間件是組裝成應(yīng)用的管道來處理請求和響應(yīng)的軟件組件。
- 每個組件可以選擇是否要在管道中將請求傳遞到下一個組件,并可以在管道中執(zhí)行某些操作之前和之后的任務(wù)。
- Request委托用于構(gòu)建請求管道。Request委托用來處理每個HTTP請求。
- 每件中間件在 ASP.NET Core都是一個對象,并且每一塊有非常具體、 專注和有限的作用。
- 最終,我們需要很多的中間件為應(yīng)用程序提供適當?shù)男袨椤?/li>
現(xiàn)在讓我們假設(shè)我們想將每個對我們應(yīng)用程序的請求都記錄日志。
- 在這種情況下,我們安裝到應(yīng)用程序中的第一塊中間件是一個日志組件。
- 這個日志程序可以看到一切傳入的請求,然后該中間件只是記錄一些信息,然后傳遞這個請求下一個塊中間件。
- 中間件是以一系列的組件出現(xiàn)在這個處理管道中。
- 我們安裝到應(yīng)用程序的下一個中間件是一個授權(quán)組件。
- 一個組件可能是尋找特定cookie或訪問HTTP標頭中的令牌。
- 如果授權(quán)組件發(fā)現(xiàn)一個令牌,它允許請求繼續(xù)。
- 如果不是,授權(quán)組件本身可能會響應(yīng)請求的HTTP錯誤代碼或?qū)⒂脩糁囟ㄏ虻降卿涰撁妗?/li>
- 否則,授權(quán)組件將請求傳遞給下一個路由器的中間件。
- 一個路由器查看URL,并確定下一步的行動。
- 路由器是在做一些回應(yīng),如果路由器沒有找到任何回應(yīng),路由器本身可能會返回404 Not Found錯誤。
案例
現(xiàn)在讓我們通過一個簡單的例子來理解更多關(guān)于中間件的知識。我們通過使用我們的啟動類的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()方法內(nèi),我們將調(diào)用IApplicationBuilder接口的擴展方法來添加中間件。
默認情況下在一個新的空項目有兩塊中間件-
IISPlatformHandler
Middleware registered with app.Run
IISPlatformHandler
IISPlatformHandler允許我們使用Windows身份驗證。它將著眼于每個傳入請求,看看是否有任何Windows身份信息相關(guān)的請求,然后調(diào)用下一個塊中間件。
Middleware registered with app.Run
在這種情況下一個中間件在app.Run中注冊的中間件。Run方法允許我們傳入另一種方法,我們可以使用它來處理每一個響應(yīng)。Run方法不是你經(jīng)常會看到的,我們可以稱它為一個中間件的終端。
你注冊運行的中間件將永遠不會有機會調(diào)用另一個中間件,它唯一能做的就是接收請求,便要產(chǎn)生某種反應(yīng)。
你也訪問到一個響應(yīng)對象,你可以在響應(yīng)對象中添加一些字符串。
如果你想在app.Run之后注冊另一個中間件,這段中間件將永遠不會被調(diào)用,因為Run方法是一個中間件的終端。它不會調(diào)用下一個塊中間件。
如何添加一個中間件
讓我們著手進行以下步驟來添加另一個中間件 −
步驟1−右鍵單擊項目并選擇Manage NuGet Packages。
步驟2−搜索 Microsoft.aspnet.diagnostics,此特定的軟件包包含許多不同種的中間件,我們可以使用。
步驟3−如果該包沒有安裝在您的項目中,那選擇安裝這個包。
步驟4−現(xiàn)在讓我們在Configure()方法調(diào)用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 − 運行您的應(yīng)用程序,您將看到以下的歡迎屏幕。
這個歡迎屏幕可能不是那么有用。
步驟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 頁面并刷新您的瀏覽器,你會看到下面的頁面。
這個 RuntimeInfoPage 是中間件,將只響應(yīng)一個特定的 URL 的請求。如果傳入的請求與該 URL 不匹配,這個中間件只是讓請求傳遞到下一件中間件。該請求將通過 IISPlatformHandler 中間件,然后轉(zhuǎn)到 UseRuntimeInfoPage 中間件。它不會創(chuàng)建響應(yīng),所以它會轉(zhuǎn)到我們的應(yīng)用程序。運行并顯示該字符串。
步驟8−我們在URL結(jié)尾添加“ runtimeinfo”?,F(xiàn)在,您將看到一個頁面,該頁面是由中間件運行時信息頁面。
你將看到一個返回頁面,它給你展示了一些關(guān)于你的運行時環(huán)境,如操作系統(tǒng)、運行時版本,結(jié)構(gòu),類型和您正在使用的所有包的信息。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)
這篇文章介紹了Entity Framework使用DbModelBuilder API創(chuàng)建表結(jié)構(gòu)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03ASP.NET2.0:頁面中鏈入的CSS、js文件帶中文時需注意
ASP.NET2.0:頁面中鏈入的CSS、js文件帶中文時需注意...2006-09-09ASP.NET MVC3的偽靜態(tài)實現(xiàn)代碼
最近使用asp.net MVC3開發(fā)B2C電子商務(wù)系統(tǒng),為了SEO的優(yōu)化工作,需要通過路由實現(xiàn)偽靜態(tài)URL,后續(xù)再根據(jù)需要生成真正的靜態(tài)頁面,不直接走路由訪問具體的頁面2011-12-12asp.net中調(diào)用winrar實現(xiàn)壓縮解壓縮的代碼
asp.net壓縮解壓縮,需要服務(wù)器安裝WinRar,并且把Rar.exe拷貝到網(wǎng)站根目錄。這樣我們就可以方面的執(zhí)行壓縮解壓縮了。2008-09-09創(chuàng)建一個完整的ASP.NET Web API項目
ASP.NET Web API具有與ASP.NET MVC類似的編程方式,ASP.NET Web API不僅僅具有一個完全獨立的消息處理管道,而且這個管道比為ASP.NET MVC設(shè)計的管道更為復(fù)雜,功能也更為強大。下面創(chuàng)建一個簡單的Web API項目,需要的朋友可以參考下2015-10-10.NET微信小程序用戶數(shù)據(jù)的簽名驗證和解密代碼
這篇文章主要介紹了.NET微信小程序用戶數(shù)據(jù)的簽名驗證和解密代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12.NET中獲取Access新增記錄Id怪現(xiàn)象解決方法
寫了一個函數(shù)獲取Access表中指定用戶Id,要求當傳入的用戶名不存在時,則在表中新增一條記錄并返回Id2012-03-03