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

Daa*_*aan 1 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();
}
Run Code Online (Sandbox Code Playgroud)

我似乎是为定期电话而工作。例如,

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 似乎工作正常,但在其他情况下则不然。

Ale*_*yny 5

发生这种情况是因为您的日志记录未正确放置在请求管道中,请在此处阅读相关内容。当您登录时,响应仍然是默认响应,状态代码为 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();


    }
Run Code Online (Sandbox Code Playgroud)