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,可以在此处下载

下载

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