[四] ASP.NET Core中间件
Posted 长不大的大灰狼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[四] ASP.NET Core中间件相关的知识,希望对你有一定的参考价值。
1、中间件
在 ASP.NET Core 中,中间件组件可以同时访问传入请求和传出响应。 因此,中间件组件可以处理传入请求并将该请求,传递给管道中的下一个中间件以进行进一步处理。也就是中间件可以看成在请求到响应过程中实现某些功能的组件。例如:StaticFiles 中间件、日志记录中间件组件、身份验证中间件,授权中间件,MVC 中间件等。
2、请求(Request)处理管道
请求管道是由Startup.cs文件中的Configure()方法进行配置,它是应用程序启动的一个重要部分。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
- 目前代码中有 2 个中间件在管道中 :UseDeveloperExceptionPage()方法和Run()方法。
- 如果存在异常并且环境是Development,UseDeveloperExceptionPage中间件会被调用,显示开发异常页面。Run()方法只能将一个信息传入Response对象,且Run()方法注册的中间件是终端中间件,即请求走到Run方法后就不会再继续往下执行了。
如果希望中间件能够调用管道中的下一个中间件,则使用Use()方法注册中间件,如下所示。
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("从第一个中间件中打印Hello World");
await next();
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("从第二个中间件中打印Hello World");
});
3、请求处理管道的流程:
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILogger<Startup> logger)
{
app.Use(async (context, next) =>
{
logger.LogInformation("MW1:传入请求");
await next();
logger.LogInformation("MW1:传出响应");
});
app.Use(async (context, next) =>
{
logger.LogInformation("MW2: 传入请求");
await next();
logger.LogInformation("MW2: 传出响应");
});
app.Run(async (context) =>
{
await context.Response.WriteAsync("MW3: 处理请求并生成响应");
logger.LogInformation("MW3: 处理请求并生成响应");
});
}
MW1:传入请求
MW2:传入请求
MW3:处理请求并生成响应
MW2:传出响应
MW1:传出响应
所有的请求都会在每个中间件组件调用next()方法之前触发。所有的响应都会在每个中间件组件调用next()方法之前触发。
以上是关于[四] ASP.NET Core中间件的主要内容,如果未能解决你的问题,请参考以下文章