如何在.NET Core中记录所有Web请求的响应代码

时间:2019-06-20 20:08:49

标签: c# logging .net-core asp.net-core-webapi

在我的.NET Core 2.2 Web Api项目中,我想记录所有返回的状态代码。

我创建了一个标准的Web Api项目,并修改了一种方法来实现此目的。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Use(async (context, next) =>
    {
        Console.WriteLine($"RESPONSE STATUSCODE  + {context.Response.StatusCode}");
        await next.Invoke();
    });

    app.UseMvc();
}

我似乎在打定期电话。例如,

curl --silent -i http://localhost:5000/api/values | grep HTTP

返回

  

HTTP / 1.1 200确定

日志记录为:

  

响应状态码+ 200

但是,当我执行此请求时

curl --silent -i http://localhost:5000/nonsense | grep HTTP

我得到这个退货:​​

  

找不到HTTP / 1.1 404

和日志记录是一样的.....

  

响应状态码+ 200

我只想记录我返回的状态代码。就这样。这该怎么做?如果返回200似乎很好用,但是在其他情况下不会。

1 个答案:

答案 0 :(得分:2)

发生这种情况是因为您的日志记录未正确放置在请求管道中,请仔细阅读here。登录时,响应仍然是默认的响应,其状态代码为200,管线尚未完成处理。

您需要将日志记录移至用于处理响应的管道中的the last处,并在此示例中将呼叫移至next.Invoke()之后:

  public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Use(async (context, next) =>
        {

            await next.Invoke();
            Console.WriteLine($"RESPONSE STATUSCODE  + {context.Response.StatusCode}");
        });
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();

        app.UseMvc();


    }