如何在Netcore中间件中获得正确的响应主体?

时间:2019-12-18 08:03:27

标签: c# asp.net .net asp.net-core async-await

我正在编写一个中间件来编写api请求日志。

但是有时响应日志将被写入两次。这是一个代码示例:

public class TestLoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;
    private int After = 0;
    private int Before = 0;

    public TestLoggingMiddleware(RequestDelegate next, ILoggerFactory logfac)
    {
        _logger = logfac.CreateLogger("ApiRequest");
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        Before = 0;
        After = 0;

        Before++;
        await _next(context);
        After++;
        After++;
        if (After > 2)
        {
            _logger.LogError($"{context.Request.Path.ToString()}_{Before}_{After}");
        }
    }


}

Before = 1和After = 4。这个问题只是偶尔出现。

netcore版本是3.1。 代码在docker中运行。

有人知道是什么问题吗?

1 个答案:

答案 0 :(得分:1)

您正在为每个请求运行此代码并维护全局状态。

这对于单个请求可能很好,但是一旦同时有多个请求,它就会失败。