如何在 InvalidModelStateResponseFactory 中获取请求正文?

问题描述

我有一个由外部应用程序调用的 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