Asp.net core 在ASP.NET Core 3中使用中间件修改响应
我的目标是编写一个中间件,负责将请求记录到我的API中,并将API对这些请求的响应记录到数据库中。 我已经做了一个中间件,它以类似的方式处理异常,但是我被这个问题难住了。 当您阅读MSDN关于中间件的内容时,您可以看到这样一幅漂亮的图片: 这使您认为中间件2接收请求,对其进行某些操作,并将其传递给中间件3,然后在中间件3完成所有处理后,将控制传递回中间件2进行额外处理 我唯一不明白的是,如果中间件2 Invoke()方法在请求期间只被调用一次,而在响应期间没有被调用,那么如何记录响应 Startup.cs:Asp.net core 在ASP.NET Core 3中使用中间件修改响应,asp.net-core,middleware,asp.net-core-middleware,Asp.net Core,Middleware,Asp.net Core Middleware,我的目标是编写一个中间件,负责将请求记录到我的API中,并将API对这些请求的响应记录到数据库中。 我已经做了一个中间件,它以类似的方式处理异常,但是我被这个问题难住了。 当您阅读MSDN关于中间件的内容时,您可以看到这样一幅漂亮的图片: 这使您认为中间件2接收请求,对其进行某些操作,并将其传递给中间件3,然后在中间件3完成所有处理后,将控制传递回中间件2进行额外处理 我唯一不明白的是,如果中间件2 Invoke()方法在请求期间只被调用一次,而在响应期间没有被调用,那么如何记录响应 Star
app.UseMiddleware<RequestLoggingMiddleware>();
在上面的示例中,我只在控制台中看到“中间件运行”一次,在初始请求期间,但在做出响应之前。如何让它在响应周期中运行?要获得响应,您只需在
等待下一个IDdleware(上下文)之后应用相同的逻辑即可代码>行
例如,要记录状态代码,请执行以下操作:
public class RequestLoggingMiddleware
{
private readonly RequestDelegate nextMiddleware;
public RequestLoggingMiddleware(RequestDelegate nextMiddleware)
{
this.nextMiddleware = nextMiddleware;
}
public async Task Invoke(HttpContext context)
{
System.Diagnostics.Debug.WriteLine("Middleware runs");
await nextMiddleware(context);
System.Diagnostics.Debug.WriteLine($"Response Code: {context.Response.StatusCode}");
}
}
要获得响应,您只需在wait nextMiddleware(上下文)之后应用相同的逻辑代码>行
例如,要记录状态代码,请执行以下操作:
public class RequestLoggingMiddleware
{
private readonly RequestDelegate nextMiddleware;
public RequestLoggingMiddleware(RequestDelegate nextMiddleware)
{
this.nextMiddleware = nextMiddleware;
}
public async Task Invoke(HttpContext context)
{
System.Diagnostics.Debug.WriteLine("Middleware runs");
await nextMiddleware(context);
System.Diagnostics.Debug.WriteLine($"Response Code: {context.Response.StatusCode}");
}
}
太棒了,谢谢!太棒了,谢谢!