Web Api 2.2 ModelState不包含针对错误的AttemptedValue

想知道是否有人可以帮助解决.Net Core Web Api 2.2问题。为了我自己的一生,当验证一个真正简单的api时,无法获得ModelState错误中AttemptedValue或RawValue的值。

因此,请采用以下非常简单的模型:

public class Person
{
        public bool Alive { get; set; }
}

控制器:

[HttpPost]
public IactionResult Post([FromBody] Person person)
{
        if (!ModelState.IsValid)
        {
                throw new Exception();
        }

        return null;
}

我在启动中添加了以下内容:

public void ConfigureServices(IServiceCollection services)
{
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.Configure<ApiBehaviorOptions>(o =>
        {
                o.InvalidmodelStateResponseFactory = actionContext =>
                        new BadRequestObjectResult(actionContext.ModelState);
        });

}

因此,使用以下Json做一个简单的帖子

{
    "Alive": "a"
}

哪个返回错误,但是检查ModelState却不包含尝试值。更令人讨厌的是,固定错误响应包含所有详细信息。不幸的是,出现固定错误的消息是该消息包含类型错误的转换,因此,例如,如果在模型中使用枚举,则类型名称将开始出现在错误消息中。

那么,下面的错误消息从哪里获取模型值?在ModelState验证之前,是否需要进行一些json序列化?

{
    "Alive": [
        "Could not convert string to boolean: a. Path 'Alive',line 2,position 13."
    ]
}

编辑...经过进一步调查,似乎是JsonInputFormatter验证了请求。我尝试遵循以下文章,并且确实确实表明JsonInputFormatter进行了验证,因为该模型在调用ReadRequestBodyAsync之前是有效的,而在调用之后是无效的。由于模型为空,因此以下链接中的代码失败。看起来所有信息可能都在InputFormatterContext的元数据中,但我不确定。

Extending ModelState to output my own message - how do I get model state value

编辑2 ...看来,直接从Json.net的JsonSerializationException类抛出的序列化异常中捕获了modelstate中的错误。检查此异常,我看不到传入的无效值,该值在异常消息中清晰可见。

谢谢

h0712027 回答:Web Api 2.2 ModelState不包含针对错误的AttemptedValue

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3091124.html

大家都在问