在我的.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似乎很好用,但是在其他情况下不会。
答案 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();
}