码迷,mamicode.com
首页 > 其他好文 > 详细

内联中间件(in-line middleware)

时间:2021-01-05 11:10:24      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:sde   local   返回   write   web   develop   text   请求   await   

可以使用Run, Map, Use,MapWhen,UseWhen 等扩展方法来实现。

简单介绍下,这几个方法的区别:

1 有回路,意思是请求可以接着往下执行,然后原路返回。

Use, UseWhen

2 无回路,请求到当前为止

Run,Map,MapWhen

 

下面来个小案例

在Startup文件中的

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
  }


  app.Use( async(context,next)=> {
    await next();
    await context.Response.WriteAsync("1");
  });

  app.UseWhen(context => {
    return context.Request.Query.Keys.Contains("a");
  }, builder =>
  {
    builder.Use(async (context, next) => {
      await next();
      await context.Response.WriteAsync("2");
    });
  });

  app.Map("/k", builder =>
  {
    builder.Use(async (c, n) =>
    {
      await n();
      await c.Response.WriteAsync("3");
    });

  });

  app.MapWhen(context => {
    return context.Request.Query.Keys.Contains("b");
  }, builder =>
  {
    builder.Run(async c =>
    {
      await c.Response.WriteAsync("4");
    });
  });

  app.Run(async c =>
  {
    await c.Response.WriteAsync("5");
  });

  //省略其他……

 

}

试试各种不同的输出

http://localhost:5000/

51

http://localhost:5000/?a=1

521

http://localhost:5000/k

31

http://localhost:5000/k?a=1

321

http://localhost:5000/k?a=1&b=1

321

http://localhost:5000/?a=1&b=1

421

http://localhost:5000/k?b=1

31

----------------------------

小提示: Map或MapWhen里面 可以使用多个Use方法和一个Run方法

内联中间件(in-line middleware)

标签:sde   local   返回   write   web   develop   text   请求   await   

原文地址:https://www.cnblogs.com/xiaonanmu/p/14220425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!