我正在构建一个 ASP.NET Core MVC 应用程序,我需要像之前在 Global.asax 中一样拥有 EndRequest 事件。
我该如何实现这一点呢?
我正在构建一个 ASP.NET Core MVC 应用程序,我需要像之前在 Global.asax 中一样拥有 EndRequest 事件。
我该如何实现这一点呢?
只需创建一个中间件并确保它尽早在管道中注册即可。
例如:
public class EndRequestMiddleware
{
private readonly RequestDelegate _next;
public EndRequestMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
// Do tasks before other middleware here, aka 'BeginRequest'
// ...
// Let the middleware pipeline run
await _next(context);
// Do tasks after middleware here, aka 'EndRequest'
// ...
}
}
调用 await _next(context)
会导致所有中间件依次运行。当所有中间件执行完后,会执行在 await _next(context)
调用之后的代码。有关中间件的更多信息,请参阅ASP.NET Core 中间件文档。特别是文档中的这个图像可以清晰地展示中间件的执行过程:Startup
类中尽可能早地完成:public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<EndRequestMiddleware>();
// Register other middelware here such as:
app.UseMvc();
}