.net core 自定義中間件


一、中間件介紹

  中間件是組裝到應用程序管道中用來理請求邏輯和響應邏輯的組件。

  每個組件都可以:

    1.選擇是否將請求傳遞給管道中的下一個組件。

    2.調用管道中的下一個組件之前和之后執行的工作。

  請求委托(Requestdelegates)用於構建請求管道,處理每個HTTP請求。

 

二、中間件處理流程

  中間件的執行分為請求進來的邏輯與響應出去的邏輯,進來的邏輯按照注冊中間件的順序,響應出去的邏輯則相反。

  中間件的請求流程由一系列請求委托組成,如下圖所示,分別注冊了三個中間件Middleware1,Middleware2,Middleware3。請求進來時會走請求邏輯logic,然后執行類型為Requestdelegates的委托對象next(),之后會走第二個中間件Middleware2的請求邏輯,如黑色箭頭所示,直到走完最后一個中間件后,會以Middleware3,Middleware2,Middleware1的順序走響應邏輯more logic。

三、自定義中間件

  有很多中間件微軟已經給我提供了,但是如何自定義中間件呢?

第一步:定義一個類,並添加以下代碼

    public class Middleware1
    {
        private readonly RequestDelegate _next;

        /// <summary>
        /// 管道執行到該中間件時候下一個中間件的RequestDelegate請求委托,如果有其它參數,也同樣通過注入的方式獲得
        /// </summary>
        /// <param name="next"></param>
        public Middleware1(RequestDelegate next)
        {
            //通過注入方式獲得對象
            _next = next;
        }

        /// <summary>
        /// 自定義中間件要執行的邏輯
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            Console.WriteLine("Request1");//請求進來時邏輯,為了驗證順序性,打印一句話
            await _next(context);//把context傳進去執行下一個中間件
            await context.Response.WriteAsync("<p>Response1</p>");//響應出去時邏輯,為了驗證順序性,輸出一句話
        }
    }

第二步:在Startup類中的Configure方法下,通過調用UseMiddleware方法注冊中間件。如果自定義的中間件Invoke方法需要傳遞參數,則可以通過UseMiddleware方法把參數傳進去,而自定義的Middleware1則需要通過依賴注入的方式拿到所傳進去的參數

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
        //按順序注冊Middleware1,Middleware2,Middleware3。Middleware2,Middleware3和Middleware1一樣,我就懶得寫了
            app.UseMiddleware<Middleware1>();
            app.UseMiddleware<Middleware2>();
            app.UseMiddleware<Middleware3>();
        }

執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM