1. 程式人生 > >DotNetCore跨平臺~聊聊中介軟體

DotNetCore跨平臺~聊聊中介軟體

回到目錄

在進行.net core平臺之後,我們如果希望在請求過程中新增一些事件是非常容易的,你可以把這些事件做成一箇中間件Middleware,然後這些中介軟體就會以Http pipeline的管道方式進行相應,並且它們就像是一個職責鏈,從你定義的第一個中介軟體開始,一個一個向下傳遞,直到最後一箇中間件完成為止!

前幾天我寫了在.net core裡實現模組化服務,DotNetCore跨平臺~元件化時代來了 主要是將我們定義的元件新增到IServiceCollection集合裡,然後在程式啟動後去註冊它們,而今天要說的Middleware用到的是IApplicationBuilder,它在程式啟動後,載入與http請求相關的元件,這些元件以Pipeline的形式進行處理,也就是我們所說的中介軟體,下面我來帶大家實現一個最簡單的Middleware!

從網上找的圖,挺形象

圖中記錄了一個請求進來,經過各個中介軟體的處理,最後逐個響應,下面我們來看一下簡單的程式碼實現,和服務元件化一樣,也是一個實現,一個擴充套件方法的呼叫,最後在startup裡去使用它。

大叔Lind.DotNetCore框架裡的Middleware

ResponseTimeMiddleware的實現

    /// <summary>
    /// 響應時間的中介軟體
    /// </summary>
    public class ResponseTimeMiddleware
    {
        private readonly
RequestDelegate _next; public ResponseTimeMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { Stopwatch sw = new Stopwatch(); sw.Start(); Console.WriteLine(
"ResponseTimeMiddleware..."); await _next.Invoke(context); sw.Stop(); Console.WriteLine($"頁面響應時間為:{sw.ElapsedMilliseconds}ms"); } }

擴充套件方法去封裝它,以便於其它地方去使用它

    /// <summary>
    /// Lind.DotNetCore.Middleware擴充套件方法
    /// </summary>
    public static class MiddlewareExtensions
    {
        public static IApplicationBuilder UseResponseTime(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<ResponseTimeMiddleware>();
        }

        public static IApplicationBuilder UseRequestKey(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<RequestKeyMiddleware>();
        }

        public static IApplicationBuilder UseAuthorizationOperation(this IApplicationBuilder builder)
        {
            return builder.UseMiddleware<AuthorizationOperationMiddleware>();
        }

    }

最後在startup裡使用它,注意是在AddMvc方法前面,要不然對你的mvc,api是無效的,呵呵!

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseAuthorizationOperation();
            app.UseResponseTime();
            app.UseRequestKey();
            app.UseStaticHttpContext();
            app.UseMvc();

事實上,今天的中介軟體是.net core裡非常大的亮點,其實早就應該寫這篇文章了,呵呵!

感謝各位的閱讀!

回到目錄