问题描述
我有一个由外部应用程序调用的 API,我相信我们遇到了很多 400 错误。
我查找了如何捕获和记录自动 HTTP 400 错误,并找到了以下解决方案:
services.AddMvc()
.ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = context =>
{
ILogger logger = context.HttpContext.RequestServices
.GetrequiredService<ILogger>();
string keys = JsonConvert.SerializeObject(context.ModelState.Keys);
string values = JsonConvert.SerializeObject(context.ModelState.Values);
logger.Debug($"Keys: {keys},Values: {values}");
return new BadRequestObjectResult(context.ModelState);
};
});
这很有效,但我假设我会获取所有键和所有值,但实际上,它只显示有错误的键,甚至不显示它们发送的值。
有没有办法在 InvalidModelStateResponseFactory
中记录整个请求正文,或者我是否以错误的方式查看它?
请注意,我不想使用 SuppressModelStateInvalidFilter
选项。
解决方法
访问HttpRequest对象的HttpContext属性,然后可以访问Body
流或IFormCollection Form
属性
context.HttpContext
.HttpRequest
.Body
//or
//.Form
我建议您考虑实现自己的结果 action filter。