欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?Core中創(chuàng)建中間件的方式匯總

 更新時(shí)間:2024年07月12日 09:00:50   作者:追逐時(shí)光者  
ASP.NET?Core中間件(Middleware)是用于處理HTTP請(qǐng)求和響應(yīng)的組件,它們被安排在請(qǐng)求處理管道中,并按順序執(zhí)行,這篇文章主要介紹了ASP.NET?Core中創(chuàng)建中間件的幾種方式,需要的朋友可以參考下

前言

今天我們一起來(lái)盤(pán)點(diǎn)一下在ASP.NET Core應(yīng)用程序中添加和創(chuàng)建中間件常見(jiàn)的四種方式。

中間件介紹

ASP.NET Core中間件(Middleware)是用于處理HTTP請(qǐng)求和響應(yīng)的組件,它們被安排在請(qǐng)求處理管道中,并按順序執(zhí)行。中間件的設(shè)計(jì)是為了使其在請(qǐng)求處理管道中能夠以靈活和可擴(kuò)展的方式處理 HTTP 請(qǐng)求和響應(yīng)。

下圖顯示了 ASP.NET Core MVC 和 Razor Pages 應(yīng)用的完整請(qǐng)求處理管道:

了解現(xiàn)有中間件的順序,以及在哪里添加自定義中間件。你可以完全控制如何重新排列現(xiàn)有中間件,或根據(jù)場(chǎng)景需要注入新的自定義中間件。

中間件用途

開(kāi)發(fā)者通過(guò)在請(qǐng)求處理管道中添加不同的中間件(Middleware)組件,可以實(shí)現(xiàn)應(yīng)用程序的認(rèn)證和授權(quán)、日志記錄、異常處理、靜態(tài)文件處理、路由和端點(diǎn)映射、CORS(跨域資源共享)、會(huì)話(huà)管理、請(qǐng)求壓縮、國(guó)際化和本地化、緩存等各種功能。

通過(guò)請(qǐng)求委托添加中間件

我們可以通過(guò)在 WebApplication 實(shí)例上調(diào)用 Use 方法,并提供一個(gè)帶有兩個(gè)參數(shù)的 lambda 方法來(lái)實(shí)現(xiàn)。第一個(gè)參數(shù)是 HttpContext,第二個(gè)參數(shù)是管道中的實(shí)際下一個(gè)請(qǐng)求委托。

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

按約定添加中間件

ASP.NET Core中提供了許多內(nèi)置中間件,例如靜態(tài)文件中間件、路由、認(rèn)證、授權(quán)中間件等。這些中間件通常已經(jīng)預(yù)先定義好了,開(kāi)發(fā)者只需按照約定調(diào)用相應(yīng)的方法即可。

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

創(chuàng)建自定義中間件類(lèi)

創(chuàng)建自定義中間件類(lèi)

首先我們創(chuàng)建一個(gè)自定義中間件類(lèi) RequestLoggingMiddleware,它將記錄每個(gè)請(qǐng)求的詳細(xì)信息。

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

創(chuàng)建擴(kuò)展方法

為了方便在應(yīng)用程序中注冊(cè)中間件,我們可以創(chuàng)建一個(gè)擴(kuò)展方法。

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

在應(yīng)用程序中使用自定義中間件

在 Program.cs 文件中,使用自定義中間件。

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

添加基于工廠(chǎng)的中間件

IMiddlewareFactory 是 ASP.NET Core 中用于創(chuàng)建和管理中間件實(shí)例的接口。它提供了一種靈活的方式來(lái)控制中間件的創(chuàng)建和生命周期管理,特別是在需要復(fù)雜依賴(lài)注入或條件實(shí)例化的場(chǎng)景中。

創(chuàng)建自定義中間件工廠(chǎng)

實(shí)現(xiàn) IMiddlewareFactory 接口的自定義工廠(chǎng)類(lèi)。

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

創(chuàng)建自定義中間件

實(shí)現(xiàn) IMiddleware 接口的自定義中間件類(lèi)。

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

注冊(cè)中間件和工廠(chǎng)

在 Program.cs 文件中注冊(cè)自定義中間件和工廠(chǎng)。

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

最后總結(jié)

在ASP.NET Core中添加和創(chuàng)建中間件的方式有很多種,本文列舉了四種常見(jiàn)的方式,具體取決于你的需求和偏好。每種方式都有其適用的場(chǎng)景,選擇合適的方法可以使你的代碼更加簡(jiǎn)潔和易于維護(hù)。

參考文章

DotNetGuide技術(shù)社區(qū)交流群

  • DotNetGuide技術(shù)社區(qū)是一個(gè)面向.NET開(kāi)發(fā)者的開(kāi)源技術(shù)社區(qū),旨在為開(kāi)發(fā)者們提供全面的C#/.NET/.NET Core相關(guān)學(xué)習(xí)資料、技術(shù)分享和咨詢(xún)、項(xiàng)目框架推薦、求職和招聘資訊、以及解決問(wèn)題的平臺(tái)。
  • 在DotNetGuide技術(shù)社區(qū)中,開(kāi)發(fā)者們可以分享自己的技術(shù)文章、項(xiàng)目經(jīng)驗(yàn)、學(xué)習(xí)心得、遇到的疑難技術(shù)問(wèn)題以及解決方案,并且還有機(jī)會(huì)結(jié)識(shí)志同道合的開(kāi)發(fā)者。
  • 我們致力于構(gòu)建一個(gè)積極向上、和諧友善的.NET技術(shù)交流平臺(tái)。無(wú)論您是初學(xué)者還是有豐富經(jīng)驗(yàn)的開(kāi)發(fā)者,我們都希望能為您提供更多的價(jià)值和成長(zhǎng)機(jī)會(huì)。

到此這篇關(guān)于ASP.NET Core中創(chuàng)建中間件的幾種方式的文章就介紹到這了,更多相關(guān)ASP.NET Core中創(chuàng)建中間件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論