石家庄市城乡建设部网站,dw软件个人简历网站怎么做,城乡和住房建设部网站,网站建设行内资讯过滤器这个是.Net MVC旧有的功能#xff0c;中间件这个概念是新出的#xff0c;
ASP.NET Core只是完成了HTTP请求调度、报文解析等必要的工作#xff0c;像检查用户身份、设置缓存报文头等操作都是在中间件中完成#xff0c;中间件就是ASP.NET Core的一个组件#xff0c;…过滤器这个是.Net MVC旧有的功能中间件这个概念是新出的
ASP.NET Core只是完成了HTTP请求调度、报文解析等必要的工作像检查用户身份、设置缓存报文头等操作都是在中间件中完成中间件就是ASP.NET Core的一个组件由前逻辑、next、后逻辑3部分组成多个中间件组成一个管道一个系统中可以有多个管道。ASP.NET Core执行的过程就是http请求和响应按照中间件组装的顺序在中间件之间流转的过程。
以前有封装过滤器进行用户身份检查、预处理请求数据中间件的同样能完成中间件的范围更广
var builder WebApplication.CreateBuilder(args);
var app builder.Build();
//定义了对/test路径请求的处理4-22为一个管道
app.Map(/test, async appbuilder {//声明第一个中间件appbuilder.Use(async (context, next) {context.Response.ContentType text/html;await context.Response.WriteAsync(1 Startbr/);await next.Invoke();//执行下一个中间件await context.Response.WriteAsync(1 Endbr/);});//声明第二个中间件appbuilder.Use(async (context, next) {await context.Response.WriteAsync(2 Startbr/);await next.Invoke();await context.Response.WriteAsync(2 Endbr/);});//中间件执行完成后执行runappbuilder.Run(async ctx {await ctx.Response.WriteAsync(hello middleware br/);});
});
app.Run();
//注意如果在中间件中使用ctx.Response.WriteAsync等方式向客户端发送响应我们就不能
//再执行next.Invoke了把请求转到其他中间件了因为其他中间件可能会对response进行了修改
//该案例仅仅当做演示public class CheckAndParsingMiddleware
{private readonly RequestDelegate next;public CheckAndParsingMiddleware(RequestDelegate next){this.next next;}//中间件的前逻辑、next、后逻辑都在这里public async Task InvokeAsync(HttpContext context){string pwd context.Request.Query[password];if (pwd123){context.Items[BodyJson] hellowrld;await next(context);//传递到下一个中间件}else{context.Response.StatusCode 401;//不会传递到下一个中间件}}
}var builder WebApplication.CreateBuilder(args);
var app builder.Build();
app.Map(/test, async appbuilder {appbuilder.UseMiddlewareCheckAndParsingMiddleware();//按注册顺序执行中间件类的Invoke方法appbuilder.Run(async ctx {Console.WriteLine(run start);ctx.Response.ContentType text/html;ctx.Response.StatusCode 200;//HttpContext.Item在同一次请求中是共享的用它来实现中间件之间数据的传递await ctx.Response.WriteAsync(ctx.Items[BodyJson].ToString());Console.WriteLine(run end);});
});
app.Run();