国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ASP.NET Core 基礎(chǔ)知識】--中間件--創(chuàng)建自定義中間件

這篇具有很好參考價值的文章主要介紹了【ASP.NET Core 基礎(chǔ)知識】--中間件--創(chuàng)建自定義中間件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、為什么需要自定義中間件

自定義中間件在ASP.NET Core中的應(yīng)用主要有以下幾個原因:

  1. 滿足特定需求: 默認(rèn)情況下,ASP.NET Core提供了許多內(nèi)置的中間件來處理常見的任務(wù),如身份驗(yàn)證、授權(quán)、靜態(tài)文件服務(wù)等。然而,某些項(xiàng)目可能有特定的需求,需要定制化的處理流程,這時就需要創(chuàng)建自定義中間件以滿足項(xiàng)目的特殊要求。
  2. 增加業(yè)務(wù)邏輯: 自定義中間件允許開發(fā)人員向請求處理流程中添加業(yè)務(wù)邏輯。這對于執(zhí)行與應(yīng)用程序的核心功能相關(guān)的任務(wù)非常有用,例如日志記錄、性能監(jiān)控、請求轉(zhuǎn)換等。通過自定義中間件,開發(fā)人員可以靈活地將業(yè)務(wù)邏輯集成到請求處理管道中。
  3. 解耦和模塊化: 自定義中間件有助于將應(yīng)用程序的不同部分解耦,使代碼更具模塊化和可維護(hù)性。每個中間件可以專注于特定的任務(wù),這樣代碼的組織結(jié)構(gòu)更清晰,便于理解和維護(hù)。
  4. 性能優(yōu)化: 自定義中間件可以用于執(zhí)行性能優(yōu)化任務(wù),例如緩存、壓縮、請求重定向等。通過在請求處理流程中插入自定義中間件,可以更好地控制和優(yōu)化應(yīng)用程序的性能。
  5. 適應(yīng)特定場景: 不同的應(yīng)用場景可能需要不同類型的中間件。通過創(chuàng)建自定義中間件,開發(fā)人員可以根據(jù)應(yīng)用的特定需求,靈活地調(diào)整和配置中間件,以適應(yīng)不同的使用場景。

自定義中間件為開發(fā)人員提供了更大的靈活性和控制權(quán),使他們能夠更好地定制和優(yōu)化ASP.NET Core應(yīng)用程序的請求處理流程,滿足特定的業(yè)務(wù)和性能需求。

二、創(chuàng)建自定義中間件的基本步驟

創(chuàng)建自定義中間件涉及以下基本步驟:

  1. 創(chuàng)建一個類: 創(chuàng)建一個類來實(shí)現(xiàn)你的中間件。這個類通常需要包含一個構(gòu)造函數(shù)以及一個名為Invoke、InvokeAsync等的方法,用于處理請求。
    public class CustomMiddleware
    {
        private readonly RequestDelegate _next;
    
        public CustomMiddleware(RequestDelegate next)
        {
            _next = next;
        }
    
        public async Task InvokeAsync(HttpContext context)
        {
            // 中間件邏輯處理
            await _next(context);
        }
    }
    
  2. 添加中間件的基本結(jié)構(gòu): 在中間件類中,你需要編寫邏輯來處理請求??梢栽?code>Invoke方法中執(zhí)行你的自定義邏輯,然后通過_next字段調(diào)用下一個中間件。
  3. 注冊中間件:Startup.cs文件的Configure方法中,使用UseMiddlewareUse方法將中間件添加到請求處理管道中。確保注冊中間件的順序正確,因?yàn)橹虚g件的執(zhí)行順序很重要。
    public void Configure(IApplicationBuilder app)
    {
        // 其他中間件
        app.UseMiddleware<CustomMiddleware>();
        // 或者使用 app.Use<CustomMiddleware>();
        // 其他中間件
    }
    
  4. 中間件的執(zhí)行流程: 確保理解中間件的執(zhí)行流程。當(dāng)請求到達(dá)時,每個中間件按照注冊的順序依次執(zhí)行,然后請求通過管道傳遞給下一個中間件,直到最終的處理程序。
  5. 配置中間件: 如果中間件需要配置選項(xiàng),可以通過構(gòu)造函數(shù)參數(shù)或其他方式將配置傳遞給中間件。這允許你在Startup.cs中配置中間件的行為。
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // 其他中間件
        app.UseMiddleware<CustomMiddleware>(/* configuration options */);
        // 其他中間件
    }
    
  6. 測試中間件: 最后,確保測試你的中間件。創(chuàng)建單元測試和集成測試,驗(yàn)證中間件在不同場景下的正確性和可靠性。

三、中間件的參數(shù)和上下文對象

3.1 解釋中間件的參數(shù)

ASP.NET Core 中間件的 InvokeInvokeAsync 方法通常接受一個 HttpContext 參數(shù),該參數(shù)提供了關(guān)于當(dāng)前請求和響應(yīng)的信息。此外,中間件的構(gòu)造函數(shù)也可以接受其他服務(wù)或選項(xiàng),以實(shí)現(xiàn)更多的定制和靈活性。

  1. HttpContext 參數(shù):
    • HttpContext 包含了有關(guān)當(dāng)前請求和響應(yīng)的信息,如請求路徑、請求方法、請求頭、查詢參數(shù)、響應(yīng)狀態(tài)等。
    • 可以使用 HttpContext 提供的方法來訪問請求和響應(yīng)的內(nèi)容,以及執(zhí)行與中間件邏輯相關(guān)的操作。
    public async Task InvokeAsync(HttpContext context)
    {
        // 使用 context 處理請求和響應(yīng)
    }
    
  2. 構(gòu)造函數(shù)參數(shù):
    • 構(gòu)造函數(shù)可以接受其他服務(wù)作為參數(shù),這些服務(wù)是通過 ASP.NET Core 依賴注入系統(tǒng)提供的。通過依賴注入,可以在中間件中使用其他組件,如數(shù)據(jù)庫上下文、日志記錄器等。
    public class CustomMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly ILogger<CustomMiddleware> _logger;
    
        public CustomMiddleware(RequestDelegate next, ILogger<CustomMiddleware> logger)
        {
            _next = next;
            _logger = logger;
        }
    
        // ...
    }
    
  3. 配置選項(xiàng):
    • 如果中間件需要配置選項(xiàng),可以通過構(gòu)造函數(shù)參數(shù)傳遞配置信息。這樣,中間件的行為可以在 Startup.cs 中進(jìn)行配置。
    public class CustomMiddlewareOptions
    {
        public string OptionValue { get; set; }
    }
    
    public class CustomMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly CustomMiddlewareOptions _options;
    
        public CustomMiddleware(RequestDelegate next, IOptions<CustomMiddlewareOptions> options)
        {
            _next = next;
            _options = options.Value;
        }
    
        // ...
    }
    
3.2 上下文對象的作用和使用方法

HttpContext 是 ASP.NET Core 中間件中的關(guān)鍵對象,它提供了有關(guān)當(dāng)前請求和響應(yīng)的信息,允許中間件與請求處理流程進(jìn)行交互。以下是 HttpContext 的主要作用和使用方法:

  1. 請求信息的獲?。?/strong>

    • 通過 HttpContext.Request 屬性,可以獲取有關(guān)當(dāng)前請求的詳細(xì)信息,如路徑、方法、協(xié)議、頭部、查詢參數(shù)等。
    public async Task InvokeAsync(HttpContext context)
    {
        string path = context.Request.Path;
        string method = context.Request.Method;
        // 其他請求信息的獲取
    }
    
  2. 響應(yīng)信息的設(shè)置:

    • 通過 HttpContext.Response 屬性,可以設(shè)置有關(guān)響應(yīng)的信息,如狀態(tài)碼、頭部、內(nèi)容類型等。
    public async Task InvokeAsync(HttpContext context)
    {
        context.Response.StatusCode = 200;
        context.Response.ContentType = "text/plain";
        // 其他響應(yīng)信息的設(shè)置
    }
    
  3. 處理請求和響應(yīng)內(nèi)容:

    • 通過 HttpContext.Request.BodyHttpContext.Response.Body 屬性,可以訪問請求和響應(yīng)的主體內(nèi)容,允許中間件對其進(jìn)行讀取或?qū)懭搿?/li>
    public async Task InvokeAsync(HttpContext context)
    {
        using (StreamReader reader = new StreamReader(context.Request.Body))
        {
            string requestBody = await reader.ReadToEnd();
            // 處理請求主體內(nèi)容
        }
    
        // 處理響應(yīng)主體內(nèi)容
        await context.Response.WriteAsync("Hello, World!");
    }
    
  4. 用戶認(rèn)證和授權(quán)信息:

    • HttpContext.User 屬性包含有關(guān)用戶的認(rèn)證和授權(quán)信息,允許中間件根據(jù)用戶的角色和聲明執(zhí)行相應(yīng)的邏輯。
    public async Task InvokeAsync(HttpContext context)
    {
        ClaimsPrincipal user = context.User;
        // 處理用戶認(rèn)證和授權(quán)信息
    }
    
  5. 重定向和路由:

    • 通過 HttpContext.Response.Redirect 方法,可以執(zhí)行重定向操作。而通過 HttpContext.GetRouteData 方法,可以獲取有關(guān)當(dāng)前路由的信息。
    public async Task InvokeAsync(HttpContext context)
    {
        // 執(zhí)行重定向
        context.Response.Redirect("/newpath");
    
        // 獲取路由信息
        RouteData routeData = context.GetRouteData();
        // 處理路由信息
    }
    
  6. 上下文的傳遞:

    • HttpContext.Items 屬性允許中間件在請求處理流程中傳遞數(shù)據(jù)。這對于在中間件之間共享信息非常有用。
    public async Task InvokeAsync(HttpContext context)
    {
        context.Items["Key"] = "Value";
        // 在中間件之間傳遞數(shù)據(jù)
    }
    

通過充分利用 HttpContext 對象的這些功能,中間件可以與請求處理管道中的其他組件進(jìn)行交互,執(zhí)行特定的邏輯,并對請求和響應(yīng)進(jìn)行處理。

四、示例:記錄請求日志的中間件

以下是一個簡單的示例,展示如何創(chuàng)建一個記錄請求日志的自定義中間件。該中間件將請求的路徑和時間戳記錄到控制臺,并繼續(xù)將請求傳遞給下一個中間件或處理程序。

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

public class LoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<LoggingMiddleware> _logger;

    public LoggingMiddleware(RequestDelegate next, ILogger<LoggingMiddleware> logger)
    {
        _next = next;
        _logger = logger;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // 記錄請求日志
        _logger.LogInformation($"Request logged: {context.Request.Path} at {DateTime.Now}");

        // 將請求傳遞給下一個中間件或處理程序
        await _next(context);
    }
}

然后,在 Startup.cs 文件的 Configure 方法中,注冊這個中間件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
{
    // 其他中間件

    // 注冊日志中間件
    app.UseMiddleware<LoggingMiddleware>();

    // 其他中間件

    // 配置異常處理中間件等
}

在這個示例中,LoggingMiddleware 類接受 RequestDelegateILogger 作為構(gòu)造函數(shù)參數(shù),分別表示請求處理管道的下一個組件和日志記錄器。在 InvokeAsync 方法中,記錄請求的路徑和時間戳,然后調(diào)用 _next(context) 將請求傳遞給下一個中間件或處理程序。

這個中間件可以用于記錄每個請求的基本信息,對于調(diào)試和監(jiān)視應(yīng)用程序的運(yùn)行非常有用。

五、總結(jié)

ASP.NET Core 中間件是請求處理管道中的可插拔組件,通過自定義中間件,開發(fā)人員能夠靈活處理請求和響應(yīng)。創(chuàng)建自定義中間件的基本步驟包括編寫類、注冊和配置中間件,同時理解中間件的參數(shù)和上下文對象的使用。自定義中間件的需求源自對特定業(yè)務(wù)邏輯、性能優(yōu)化和模塊化的需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-797851.html

到了這里,關(guān)于【ASP.NET Core 基礎(chǔ)知識】--中間件--創(chuàng)建自定義中間件的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • asp.net core中間件預(yù)防防止xss攻擊

    上面實(shí)現(xiàn)思路是針對json序列化后的string字符串進(jìn)行編碼防止xss攻擊 其他實(shí)現(xiàn)比如中間件、Action的AOP方法也是可以的,可以自己實(shí)現(xiàn) 主要是看web項(xiàng)目使用的是那個json序列化工具newtonsoft就用newtonsoft,system.text.json就用下面的那個

    2024年02月07日
    瀏覽(20)
  • 如何在 ASP.NET Core 配置請求超時中間件

    如何在 ASP.NET Core 配置請求超時中間件

    本文參考官方文檔,使用Asp.net core 8.0 的最小API 模板項(xiàng)目,配置超時中間件。 超時中間件可用于所有類型的ASP.NET Core應(yīng)用:最小 API、帶控制器的 Web API、MVC 和 Razor Pages。請求超時的屬性位于命名空間 Microsoft.AspNetCore.Http.Timeouts 中。 需要注意的是,當(dāng)應(yīng)用在調(diào)試模式下運(yùn)行時

    2024年01月20日
    瀏覽(93)
  • 1.ASP.NET Core中間件管道MAP的作用?

    簡述: Map基于給定請求路徑的匹配項(xiàng)來創(chuàng)建請求管道分支??梢葬槍Σ煌穆窂教砑硬煌闹虚g件。 詳解: 中間件是組裝到應(yīng)用程序管道中以處理請求和響應(yīng)的軟件組件。 每個組件都選擇是否將請求傳遞給管道中的下一個組件,并可以在管道中調(diào)用下一個組件之前和之后執(zhí)

    2024年02月17日
    瀏覽(21)
  • .net 溫故知新【17】:Asp.Net Core WebAPI  中間件

    .net 溫故知新【17】:Asp.Net Core WebAPI 中間件

    到這篇文章為止,關(guān)于.NET \\\"溫故知新\\\"系列的基礎(chǔ)知識就完結(jié)了,從這一系列的系統(tǒng)回顧和再學(xué)習(xí),對于.NET core、ASP.NET CORE又有了一個新的認(rèn)識。 不光是從使用,還包括這些知識點(diǎn)的原理,雖然深入原理談不上,但對于日常使用也夠了,我想的是知其然,知其所以然。 在實(shí)際

    2024年01月18日
    瀏覽(96)
  • ASP.NET Core如何知道一個請求執(zhí)行了哪些中間件?

    ASP.NET Core如何知道一個請求執(zhí)行了哪些中間件?

    需要添加兩個Nuget包分別是: Microsoft.AspNetCore.MiddlewareAnalysis 和 Microsoft.Extensions.DiagnosticAdapter ,前者是分析記錄中間件核心代碼實(shí)現(xiàn)后者是用來接收日志輸出的,由于是用的DiagnosticSource方式記錄日志,所以需要使用DiagnosticListener對象的SubscribeWithAdapter方法來訂閱。 這個適配器

    2023年04月09日
    瀏覽(100)
  • ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    Microsoft.AspNetCore.RateLimiting ?中間件提供速率限制(限流)中間件。 它是.NET 7 以上版本才支持的中間件,剛看了一下,確實(shí)挺好用,下面給大家簡單介紹一下: RateLimiterOptionsExtensions?類提供下列用于限制速率的擴(kuò)展方法:????? 固定窗口限制器 滑動窗口限制器 令牌桶限

    2024年01月17日
    瀏覽(18)
  • asp.net core 一種基于token 和 Permission 的權(quán)限管理中間件示例

    asp.net core 一種基于token 和 Permission 的權(quán)限管理中間件示例

    asp.net core webapi 下面,想做一個過濾權(quán)限的Filter,配合token,對api做一個較為細(xì)粒度的權(quán)限控制, 該filter (PermissionFilter) 的作用是用戶LoginUser.Permissions 列表中有 Key指定的權(quán)限才可以訪問,沒有則返回403 錯誤碼。 ? 1. 先上封裝后的使用效果 說明:要求登錄即可,不要求特定權(quán)限

    2024年02月05日
    瀏覽(22)
  • 精通中間件測試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性

    精通中間件測試:Asp.Net Core實(shí)戰(zhàn)指南,提升應(yīng)用穩(wěn)定性和可靠性

    在上一章節(jié)我們實(shí)戰(zhàn)了在 Asp.Net Core 中的項(xiàng)目實(shí)戰(zhàn),這一章節(jié)講解一下如何測試 Asp.Net Core 的中間件。 還記得我們在集成測試中提供的 TestServer 嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。包含了用于在測試環(huán)境中模擬 ASP.NET Core 應(yīng)用程序的類和方法。通過使用 TestSe

    2024年04月22日
    瀏覽(35)
  • 「中間件」rabbitmq 消息隊(duì)列基礎(chǔ)知識

    RabbitMQ是一個消息隊(duì)列軟件,用于在應(yīng)用程序之間轉(zhuǎn)發(fā)消息。以下是RabbitMQ的基本概念: 消息:RabbitMQ中的消息是傳遞的基本單位,它由消息頭和消息體組成。 隊(duì)列(Queue):隊(duì)列是消息的緩沖區(qū),用于存儲待處理的消息。 交換器(Exchange):交換器是接收生產(chǎn)者發(fā)送的消息并

    2024年02月07日
    瀏覽(96)
  • 網(wǎng)絡(luò)安全基礎(chǔ)知識&中間件簡單介紹

    網(wǎng)絡(luò)安全基礎(chǔ)知識&中間件簡單介紹

    apache-httpd tomcat iis lighttp nginx:不是用來web服務(wù)器,而是用來做反向代理(tps10w,優(yōu)化tqs2020w) fastdf:FastDFS 是一個開源的高性能分布式文件系統(tǒng)(DFS)。 它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負(fù)載平衡。主要解決了海量數(shù)據(jù)存儲問題,特別適合以

    2023年04月16日
    瀏覽(80)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包