小編給大家分享一下在ASP.NET Core中編寫中間件的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
為普陀等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及普陀網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站制作、成都網(wǎng)站建設(shè)、普陀網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!這篇文章探討了讓不同的請求去使用不同的中間件,那么我們應(yīng)該如何配置ASP.NET Core中間件?其實中間件只是在ASP.NET Core中處理Web請求的管道。所有ASP.NET Core應(yīng)用程序至少需要一個中間件來響應(yīng)請求,并且您的應(yīng)用程序?qū)嶋H上只是中間件的集合。當(dāng)然MVC管道本身就是中間件,早在WebForm時代就出現(xiàn)過HttpModules、HttpHandler、那個時候悠然記得我通過它們來組織我的廣告系統(tǒng),不閑扯我們繼續(xù)。
每個中間件組件都有一個帶有HttpContext參數(shù)的Invoke方法。您可以使用這個參數(shù)來處理方法。
public async Task Invoke(HttpContext context) { if (context.Request.Path...) { await context.Response.WriteAsync("writing text..."); } }
應(yīng)用程序中最頂層的中間件將始終針對每個請求被調(diào)用。這是由.NET框架自動完成的。中間件可以向客戶端發(fā)送響應(yīng),也可以調(diào)用下一個中間件。對于后一種選擇,它當(dāng)然需要訪問下一個中間件組件。這就是為什么大多數(shù)中間件組件都是使用帶有RequestDelegate參數(shù)的構(gòu)造函數(shù)定義的。總之,RequestDelegate會自動填充,您無需在意。
中間件在Startup.cs的Configure方法中注冊。Configure方法具有IApplicationBuilder參數(shù),該參數(shù)提供了所有類型的中間件注冊所需的方法,我們試著去編寫一個中間件。
public class MyCustomMiddleware { private readonly RequestDelegate _next; public MyCustomMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context, IWebHostEnvironment env) { context.Response.Headers["app-name"] = env.ApplicationName+"Zaranet"; context.Response.Headers["env-name"] = env.EnvironmentName+ "Zaranet"; await _next(context); } }
隨后我們在Startup.cs的Configure方法中通過 use 來注冊自定義中間件。
public void Configure(IApplicationBuilder app, ...) { app.UseMyCustomMiddleware(); }
啟動程序我們發(fā)現(xiàn)一些正常,我們得到了我們想要的效果。
但實際上,您很少需要直接調(diào)用UseMiddleware,因為中間件作者的標(biāo)準(zhǔn)方法是編寫特定于所注冊中間件的擴(kuò)展方法:
using MiddlerWareSolucation.MiddlerWare; using Microsoft.AspNetCore.Builder; namespace MiddlerWareSolucation.MiddlerWare_Extensions { public static class MyCustomMiddlewareExtensions { public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app) { app.UseMiddleware<MyCustomMiddleware>(); return app; } } }
隨后直接調(diào)用Extensions擴(kuò)展方法,效果還是一樣的。
public void Configure(IApplicationBuilder app, ...) { app.UseMyCustomMiddleware(); }
部分時候我們想要通過客戶端請求的路徑來對我們的中間件進(jìn)行啟動,當(dāng)然 MapWhen 允許您通過指定謂詞將中間件管道分成兩個完全獨立的分支:
app.UseMiddlewareOne(); app.MapWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder => { appBuilder.UseMiddlewareTwo(); }); app.UseMiddlewareThree();
在此示例中,中間件One將始終執(zhí)行,如果請求路徑以“ / api”開頭,則將執(zhí)行中間件Two。否則,將執(zhí)行中間件Three。使用這種配置,中間件2和中間件3都無法針對單個請求執(zhí)行。
我想說的是最后一種情況是,您希望大多數(shù)中間件針對所有請求運行,但是您有一些條件件-特定中間件僅應(yīng)針對某些請求運行。
這可以通過UseWhen輕松實現(xiàn),UseWhen還使用謂詞來確定中間件是否應(yīng)該運行:
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder => { appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}"); appBuilder.UseExceptionHandler("/apierror/500"); });
看完了這篇文章,相信你對“在ASP.NET Core中編寫中間件的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁名稱:在ASP.NETCore中編寫中間件的示例分析-創(chuàng)新互聯(lián)
本文來源:http://vcdvsql.cn/article16/ppedg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、網(wǎng)站制作、網(wǎng)站排名、定制開發(fā)、網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容