中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

DotNetCore跨(kua)平臺~聊(liao)聊(liao)中(zhong)間件

回到目錄

在進(jin)行.net core平臺之(zhi)后,我們(men)如果希望在請求(qiu)過程中添加一(yi)些(xie)事件(jian)(jian)(jian)是非常容易(yi)的(de),你(ni)可(ke)以(yi)(yi)把這(zhe)些(xie)事件(jian)(jian)(jian)做成一(yi)個(ge)中間(jian)件(jian)(jian)(jian)Middleware,然后這(zhe)些(xie)中間(jian)件(jian)(jian)(jian)就會以(yi)(yi)Http pipeline的(de)管道方式(shi)進(jin)行相應,并(bing)且它們(men)就像是一(yi)個(ge)職(zhi)責鏈,從(cong)你(ni)定(ding)義的(de)第一(yi)個(ge)中間(jian)件(jian)(jian)(jian)開始,一(yi)個(ge)一(yi)個(ge)向下(xia)傳遞,直到(dao)最后一(yi)個(ge)中間(jian)件(jian)(jian)(jian)完成為(wei)止(zhi)!

前幾天我寫了在.net core里實現模塊化服務,DotNetCore跨平臺~組件化時代來了 主要是(shi)將我(wo)們定義的(de)(de)(de)組件(jian)(jian)添加(jia)到IServiceCollection集合里,然(ran)后(hou)在(zai)程(cheng)序(xu)啟動后(hou)去注冊它們,而今天要說的(de)(de)(de)Middleware用到的(de)(de)(de)是(shi)IApplicationBuilder,它在(zai)程(cheng)序(xu)啟動后(hou),加(jia)載(zai)與http請求(qiu)相關的(de)(de)(de)組件(jian)(jian),這些組件(jian)(jian)以Pipeline的(de)(de)(de)形式進行處理,也就是(shi)我(wo)們所說的(de)(de)(de)中間件(jian)(jian),下面我(wo)來帶大家實現(xian)一個最(zui)簡單(dan)的(de)(de)(de)Middleware!

從(cong)網上找(zhao)的圖,挺形(xing)象

圖(tu)中記錄了一(yi)(yi)個請求進來,經過各個中間件(jian)(jian)的(de)處理(li),最后(hou)逐個響應,下面我(wo)們(men)來看(kan)一(yi)(yi)下簡單的(de)代碼實(shi)現,和服(fu)務組件(jian)(jian)化一(yi)(yi)樣,也是一(yi)(yi)個實(shi)現,一(yi)(yi)個擴(kuo)展(zhan)方(fang)法(fa)的(de)調(diao)用,最后(hou)在startup里去使用它。

大(da)叔(shu)Lind.DotNetCore框架里的Middleware

ResponseTimeMiddleware的實(shi)現

    /// <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($"頁(ye)面(mian)響應時間(jian)為(wei):{sw.ElapsedMilliseconds}ms");
        }

    }

擴展方(fang)法去封裝它(ta)(ta),以便于其它(ta)(ta)地方(fang)去使用它(ta)(ta)

    /// <summary>
    /// Lind.DotNetCore.Middleware擴(kuo)展方法
    /// </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>();
        }

    }

最后在(zai)startup里使用它,注意是在(zai)AddMvc方法前面(mian),要不然對你的(de)mvc,api是無效(xiao)的(de),呵呵!

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

事實(shi)上,今天的(de)中間件是(shi).net core里非常大的(de)亮點,其實(shi)早就應該寫這篇文章了,呵呵!

感謝各位的閱讀!

回到目錄

 

posted @ 2017-11-20 22:39  張占嶺  閱讀(2680)  評論(0)    收藏  舉報