【发布时间】:2019-08-13 18:14:27
【问题描述】:
我在带有枚举的 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)
我想接收该值,即使它超出枚举中的编码限制。
【问题讨论】:
标签: c# enums asp.net-core-webapi model-binding