C# FromQueryAttribute枚举参数抛出验证\u错误无效值,但具有FromBodyAttribute的参数没有?

C# FromQueryAttribute枚举参数抛出验证\u错误无效值,但具有FromBodyAttribute的参数没有?,c#,asp.net-core,.net-core,enums,model-binding,C#,Asp.net Core,.net Core,Enums,Model Binding,在ASP.NET Core中,如果一个操作直接接受一个枚举类型,并且该枚举定义了1,如果我们传递一个不同于1的值,我们将得到一个验证错误 这很好!但是,当枚举位于复杂对象类型内部时,当它们是从请求主体构建的时,它不起作用([FromBody]属性) 为什么会这样?我知道任何来自身体的东西都是由JSON转换器处理的。当查询绑定器(它是什么/在哪里?)为我们做这些时,为什么他们不能为我们处理这些 示例枚举: public Enum Example { One = 1 } 行动示例: publ

在ASP.NET Core中,如果一个操作直接接受一个枚举类型,并且该枚举定义了
1
,如果我们传递一个不同于1的值,我们将得到一个验证错误

这很好!但是,当枚举位于复杂对象类型内部时,当它们是从请求主体构建的时,它不起作用(
[FromBody]
属性)

为什么会这样?我知道任何来自身体的东西都是由JSON转换器处理的。当查询绑定器(它是什么/在哪里?)为我们做这些时,为什么他们不能为我们处理这些

示例枚举:

public Enum Example
{
   One = 1
}
行动示例:

public object ExampleAction(Enum hello)
{
   return Ok();
}
如果您使用HTTP请求点击该操作,并在一个值不同于1的查询字符串中传递
hello
参数,您将得到一个验证错误


现在,如果您使用
[FromBody]
属性注释
hello
参数,并发出新请求(这次通过body而不是查询字符串传递数据),则该行为将丢失。

@Yinqiu这有什么区别?如何通过查询而不是正文成功绑定和验证它们?这似乎是由json转换中的默认行为造成的,无法传递枚举类型json有关json的详细信息,您可以查看官方json文档。@Yinqiu您可以插入一个链接吗?你指的是什么?因为除了它提供的方法之外,它没有说任何有用的东西。你可以看到线程,它可能对你有帮助。