枚举模型绑定 [FromRoute] 的行为不同于 .net core 中的 [FromBody]
Enum model binding [FromRoute] behaves differently than [FromBody] in .net core
我在带有枚举的 bindind 模型中得到了不同的行为,并且在传递超出枚举限制的信息时我无法获得正确的值。
我有一个包含 Test1 = 1、Test2 = 2、Test3 = 3 的 TestEnum 枚举。
在使用 [FromBody]
的 [HttpPost]
或 [HttpPut]
中,我的 DTO 对象正确接收枚举值,即使我传递了一个不同的值,例如 5。
但是,在使用 [FromRoute]
的 Get/Put 中,当输入的值在枚举限制(1、2 或 3)内时,我的 DTO 对象正确接收枚举。
如果我传递 5,枚举器的值变为零,不像 [FromBody]
可以正常接收值 5,即使它在编码的 Test1、Test2 和 Test3 之外。
public enum TestEnum
{
Test1 = 1,
Test2 = 2,
Test3 = 3
}
即使超出枚举限制,它也能完美接收值。
[HttpPost]
public async Task<ActionResult<NotificationResult>> Post([FromBody]TestCommand command)
这里,在[FromRoute]
和[FromBody]
中,当值在枚举边界内时,它们会被完美接收。
超出范围时,[FromRoute]
为零,[FromBody]
为 5。
[HttpPut("{id:int}")]
public async Task<ActionResult<NotificationResult>> Put([FromRoute]TestEnum id, [FromBody]TestCommand command)
此处,在 [FromRoute]
中,当值在枚举边界内时,它们会被完美接收。
超出范围时,[FromRoute]
变为零。
[HttpGet("{id:int}")]
public async Task<ActionResult<TestQueryResult>> GetById([FromRoute]TestEnum id)
我想接收值,即使它超出了枚举的编码限制。
.net core 2.1之后选项SuppressBindingUndefinedValueToEnumType的默认值为true。所以你需要像下面这样改变:
services.AddMvc(opt=>
opt.SuppressBindingUndefinedValueToEnumType=false)
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
问题已解决。
现在可以了。
我在带有枚举的 bindind 模型中得到了不同的行为,并且在传递超出枚举限制的信息时我无法获得正确的值。
我有一个包含 Test1 = 1、Test2 = 2、Test3 = 3 的 TestEnum 枚举。
在使用 [FromBody]
的 [HttpPost]
或 [HttpPut]
中,我的 DTO 对象正确接收枚举值,即使我传递了一个不同的值,例如 5。
但是,在使用 [FromRoute]
的 Get/Put 中,当输入的值在枚举限制(1、2 或 3)内时,我的 DTO 对象正确接收枚举。
如果我传递 5,枚举器的值变为零,不像 [FromBody]
可以正常接收值 5,即使它在编码的 Test1、Test2 和 Test3 之外。
public enum TestEnum
{
Test1 = 1,
Test2 = 2,
Test3 = 3
}
即使超出枚举限制,它也能完美接收值。
[HttpPost]
public async Task<ActionResult<NotificationResult>> Post([FromBody]TestCommand command)
这里,在[FromRoute]
和[FromBody]
中,当值在枚举边界内时,它们会被完美接收。
超出范围时,[FromRoute]
为零,[FromBody]
为 5。
[HttpPut("{id:int}")]
public async Task<ActionResult<NotificationResult>> Put([FromRoute]TestEnum id, [FromBody]TestCommand command)
此处,在 [FromRoute]
中,当值在枚举边界内时,它们会被完美接收。
超出范围时,[FromRoute]
变为零。
[HttpGet("{id:int}")]
public async Task<ActionResult<TestQueryResult>> GetById([FromRoute]TestEnum id)
我想接收值,即使它超出了枚举的编码限制。
.net core 2.1之后选项SuppressBindingUndefinedValueToEnumType的默认值为true。所以你需要像下面这样改变:
services.AddMvc(opt=>
opt.SuppressBindingUndefinedValueToEnumType=false)
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
问题已解决。 现在可以了。