5.3 中間件

中間件是用於組成應用程序管道來處理請求和響應的組件。管道內的每一個組件都可以選擇是否將請求交給下一個組件,並在管道中調用下一個組件之前和之後執行某些操作。請求委託被用來建立請求管道,請求委託處理每一個http請求。

請求委託通過使用IApplicationBuilder類型的Run、Map、以及Use擴展方法配置,並在Startup類中傳給Configure方法。

個人理解:中間件就像http請求一個mvc路由然後程序就返回一個怎樣響應,這寫代碼寫在Configure方法裏面。

例子一:無論頁面怎麼請求,就是返回Hello World!

app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });

例子二:run方法會使得請求在管路中短路Hello World2不會執行。

app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello,World");
            });
app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello,World2");//不會顯示
            });

例子三:next參數繼續執行請求

 loggerFactory.AddConsole(minLevel: LogLevel.Information);
            var logger = loggerFactory.CreateLogger("Middleware");
            app.Use(async (context, next) =>
            {
                logger.LogInformation("Handling request.");
                await next.Invoke();
                logger.LogInformation("Finished handling request");
            });

            app.Run(async context =>
            {
                await context.Response.WriteAsync("Hello,World");
            });

例子四:,map方法:根據傳入map方法的參數進行請求返回

app.Map("/maptest", HandleMapTest);//只有請求路徑是maptest纔會執行HandleMapTest委託

private void HandleMapTest(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("map test success");
            });
        }

例子五:mapwhen用於地址欄的querystring參數的試用

app.MapWhen(context =>
            {
                return context.Request.Query.ContainsKey("branch");
            }, HandleBranch);
private static void HandleBranch(IApplicationBuilder app)
        {
            app.Run(async context =>
            {
                await context.Response.WriteAsync("brancb userd");
            });
        }

實戰中間件demo,可以在此處下載

下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章