Как записать код ответа на все веб-запросы в .NET Core - PullRequest
1 голос
/ 20 июня 2019

В моем проекте .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 OK

И запись в журнал:

STATUSCODE RESPONSE + 200

Однако, когда я делаю этот запрос

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

я получаю это возвращенное:

HTTP / 1.1 404 не найден

И ведение журнала такое же .....

STATUSCODE ОТВЕТА + 200

Я просто хочу записать свой возвращенный код состояния.Это все.Как это сделать?Кажется, он работает нормально, если возвращается 200, но не в других ситуациях.

1 Ответ

2 голосов
/ 20 июня 2019

Это происходит потому, что ваша запись в журнал неправильно размещена в конвейере запросов, прочитайте об этом здесь .Когда вы регистрируетесь, ответ по-прежнему является ответом по умолчанию с кодом состояния 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();


    }
...