我正在研究ASP.Net Core Web API项目,我想记录所有请求和500个服务器错误。
我使用自定义中间件记录请求,它在startup.cs中定义为:
app.UseMiddleware<logMiddleware>();
我还定义了一个异常处理程序来捕获startup.cs中的服务器错误:
app.UseExceptionHandler(builder => {
builder.Run(async context => {
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null) {
logService logger = new logService(conf);
await logger.logError(error, context);
}
});
});
我将请求信息保存在错误日志中,因此当响应代码为500时,我不需要保存请求日志,因此我在请求日志功能中添加了一个检查以过滤错误:
public async Task logRequestAsync(HttpContext context) {
if (context.Response.StatusCode != 500) {
//do things
}
}
问题是Response.StatusCode返回200,而不是500。它可能在API调用的功能完成之前运行,并且服务器错误在运行时稍后发生。
是否可以将“请求日志”过程移至创建响应的位置,而不是API请求的开始位置?