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

下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值