日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

ASP.NET Core中創建中間件的幾種方式

來源: 責編: 時間:2024-07-12 17:26:41 159觀看
導讀前言今天我們一起來盤點一下在ASP.NET Core應用程序中添加和創建中間件常見的四種方式。中間件介紹ASP.NET Core中間件(Middleware)是用于處理HTTP請求和響應的組件,它們被安排在請求處理管道中,并按順序執行。中間件的設

前言

今天我們一起來盤點一下在ASP.NET Core應用程序中添加和創建中間件常見的四種方式。QrC28資訊網——每日最新資訊28at.com

中間件介紹

ASP.NET Core中間件(Middleware)是用于處理HTTP請求和響應的組件,它們被安排在請求處理管道中,并按順序執行。中間件的設計是為了使其在請求處理管道中能夠以靈活和可擴展的方式處理 HTTP 請求和響應。QrC28資訊網——每日最新資訊28at.com

下圖顯示了 ASP.NET Core MVC 和 Razor Pages 應用的完整請求處理管道:QrC28資訊網——每日最新資訊28at.com

QrC28資訊網——每日最新資訊28at.com

了解現有中間件的順序,以及在哪里添加自定義中間件。你可以完全控制如何重新排列現有中間件,或根據場景需要注入新的自定義中間件。QrC28資訊網——每日最新資訊28at.com

圖片圖片QrC28資訊網——每日最新資訊28at.com

中間件用途

開發者通過在請求處理管道中添加不同的中間件(Middleware)組件,可以實現應用程序的認證和授權、日志記錄、異常處理、靜態文件處理、路由和端點映射、CORS(跨域資源共享)、會話管理、請求壓縮、國際化和本地化、緩存等各種功能。QrC28資訊網——每日最新資訊28at.com

通過請求委托添加中間件

我們可以通過在 WebApplication 實例上調用 Use 方法,并提供一個帶有兩個參數的 lambda 方法來實現。第一個參數是 HttpContext,第二個參數是管道中的實際下一個請求委托。QrC28資訊網——每日最新資訊28at.com

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            app.Use(async (context, next) =>            {                // 在這里處理請求                // ...                await next.Invoke();                // 在這里處理響應                // ...            });            app.Run();

按約定添加中間件

ASP.NET Core中提供了許多內置中間件,例如靜態文件中間件、路由、認證、授權中間件等。這些中間件通常已經預先定義好了,開發者只需按照約定調用相應的方法即可。QrC28資訊網——每日最新資訊28at.com

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            // 使用靜態文件中間件            app.UseStaticFiles();            // 使用路由中間件            app.UseRouting();            // 使用認證中間件            app.UseAuthentication();            // 使用授權中間件            app.UseAuthorization();            app.Run();

創建自定義中間件類

創建自定義中間件類

首先我們創建一個自定義中間件類 RequestLoggingMiddleware,它將記錄每個請求的詳細信息。QrC28資訊網——每日最新資訊28at.com

public class RequestLoggingMiddleware    {        private readonly RequestDelegate _next;        public RequestLoggingMiddleware(RequestDelegate next)        {            _next = next;        }        public async Task InvokeAsync(HttpContext context)        {            // 記錄請求信息            Console.WriteLine($"Request Method: {context.Request.Method}");            Console.WriteLine($"Request Path: {context.Request.Path}");            // 調用下一個中間件            await _next(context);            // 記錄響應狀態碼            Console.WriteLine($"Response Status Code: {context.Response.StatusCode}");        }    }

創建擴展方法

為了方便在應用程序中注冊中間件,我們可以創建一個擴展方法。QrC28資訊網——每日最新資訊28at.com

public static class RequestLoggingMiddlewareExtensions    {        public static IApplicationBuilder UseRequestLogging(this IApplicationBuilder builder)        {            return builder.UseMiddleware<RequestLoggingMiddleware>();        }    }

在應用程序中使用自定義中間件

在 Program.cs 文件中,使用自定義中間件。QrC28資訊網——每日最新資訊28at.com

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            // 使用自定義中間件            app.UseRequestLogging();            app.Run();

添加基于工廠的中間件

IMiddlewareFactory 是 ASP.NET Core 中用于創建和管理中間件實例的接口。它提供了一種靈活的方式來控制中間件的創建和生命周期管理,特別是在需要復雜依賴注入或條件實例化的場景中。QrC28資訊網——每日最新資訊28at.com

創建自定義中間件工廠

實現 IMiddlewareFactory 接口的自定義工廠類。QrC28資訊網——每日最新資訊28at.com

public class CustomMiddlewareFactory(IServiceProvider serviceProvider) : IMiddlewareFactory    {        private readonly IServiceProvider _serviceProvider = serviceProvider;        public IMiddleware? Create(Type middlewareType)        {            // 使用服務提供者創建中間件實例            return _serviceProvider.GetService(middlewareType) as IMiddleware;        }        public void Release(IMiddleware middleware)        {            // 如果需要,可以在這里釋放中間件實例(容器負責釋放資源)            (middleware as IDisposable)?.Dispose();        }    }

創建自定義中間件

實現 IMiddleware 接口的自定義中間件類。QrC28資訊網——每日最新資訊28at.com

public class CustomMiddleware : IMiddleware    {        public async Task InvokeAsync(HttpContext context, RequestDelegate next)        {            Console.WriteLine("在這里處理請求.......");            await next(context);            Console.WriteLine("在這里處理響應.......");        }    }

注冊中間件和工廠

在 Program.cs 文件中注冊自定義中間件和工廠。QrC28資訊網——每日最新資訊28at.com

var builder = WebApplication.CreateBuilder(args);            // 注冊中間件和工廠到依賴注入容器            builder.Services.AddTransient<CustomMiddleware>();            builder.Services.AddTransient<IMiddlewareFactory, CustomMiddlewareFactory>();            var app = builder.Build();            // 使用基于工廠的中間件            app.UseMiddleware<CustomMiddleware>();            app.Run();

最后總結

在ASP.NET Core中添加和創建中間件的方式有很多種,本文列舉了四種常見的方式,具體取決于你的需求和偏好。每種方式都有其適用的場景,選擇合適的方法可以使你的代碼更加簡潔和易于維護。QrC28資訊網——每日最新資訊28at.com

參考文章

  • https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-8.0
  • https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/extensibility?view=aspnetcore-8.0

本文鏈接:http://www.www897cc.com/showinfo-26-100737-0.htmlASP.NET Core中創建中間件的幾種方式

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 我們一起聊聊設計實時聊天系統的架構

下一篇: 突破與創新:Vue.js 創始人尤雨溪 2024 年度技術前瞻

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數量是否小于或等于一個數字。例如,一個擁有三個或更多子項的grid。你可能會想,為什么需要這樣做呢?在某些情況下,一個組件或一個布局可能會
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(niudaocaijing)7月5日,企鵝FM發布官方公告稱由于業務調整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業務走向消亡。騰訊在長音頻領域還在摸索。為
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就&ldquo;胡錫進炒股是否知道認真報道&rdquo;展開討論。有
  • 小米MIX Fold 3配置細節曝光:搭載領先版驍龍8 Gen2+罕見5倍長焦

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 郭明錤稱華為和江淮汽車合作開發問界MPV,定價100萬左右、計劃明年量產

    8 月 1 日消息,郭明錤今天在 Medium 平臺發布博文,稱華為正在和江淮汽車合作,開發售價在 100 萬元的問界 MPV,預計在 2024 年第 2 季度量產,銷量目標為
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 阳泉市| 沂水县| 多伦县| 东乌珠穆沁旗| 沂水县| 岐山县| 金阳县| 那曲县| 东乡族自治县| 广宗县| 儋州市| 三都| 本溪| 新建县| 南江县| 鄂伦春自治旗| 商丘市| 阿拉善右旗| 蕲春县| 无锡市| 云安县| 松溪县| 龙门县| 漳平市| 桑植县| 札达县| 合作市| 柳河县| 于都县| 中宁县| 额敏县| 延安市| 清徐县| 汉沽区| 漠河县| 五家渠市| 阳江市| 岫岩| 出国| 康平县| 洪江市|