日志中间件实际上是500,因此会得到200的响应代码

时间:2019-05-02 16:58:13

标签: asp.net-core .net-core asp.net-core-webapi middleware asp.net-core-middleware

我正在研究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请求的开始位置?

0 个答案:

没有答案