【问题标题】:How to get the correct response body in netcore middleware?如何在网络核心中间件中获得正确的响应体?
【发布时间】:2019-12-18 08:03:27
【问题描述】:

我正在写一个中间件来写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}");
        }
    }


}

之前=1,之后=4。这个问题只是偶尔出现。

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

有人知道问题出在哪里吗?

【问题讨论】:

  • 问题可能是缺少线程同步。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多