gpt4 book ai didi

c# - Web API - 复杂类型枚举的表单编码输入允许无效值

转载 作者:太空宇宙 更新时间:2023-11-03 23:46:19 25 4
gpt4 key购买 nike

我有一个具有许多属性的复杂类型,其中一个是枚举。将数据(application/x-www-form-urlencoded)放入将此类型作为参数的 Web API 方法时,它似乎允许为枚举属性的值传递任何字符串值。如果传递的值是枚举的成员之一,它会正确分配值,但如果传递的值无效,它只会分配枚举的第一个成员。

描述问题的简单示例 - 给定模型类:

public enum EdibleFarmAnimal {
Sheep = 0,
Cow = 1,
Chicken = 2
}

public class ExampleModel {
public EdibleFarmAnimal EatThis { get; set; }
public string AnotherIrrelevantProperty { get; set; }
}

...和网络 API 方法:

[HttpPut]
[ActionName("Put")]
public void Put(long id, ExampleModel model) {
// Do something with the model
}

如果我将 EatThis=Cow&AnotherIrrelevantProperty=cheese 放入相关 URL,它会按预期工作,并且 model.EatThis 等于 EdibleFarmAnimal.Cow,但是如果我 PUT EatThis=Horse&AnotherIrrelevantProperty= cheese 然后将 model.EatThis 设置为 EdibleFarmAnimal.Sheep,而我希望(并期望)抛出某种错误,因为输入对于它被反序列化为的类型无效。

最佳答案

Enum在C#中有一个默认值0,所以当它不能解析你的输入时,它默认为0代表对于枚举中的 Sheep ( msdn article on this )。

您可以做的是创建一个 Invalid 枚举元素并将其分配给 0:

public enum EdibleFarmAnimal {
Invalid = 0,
Sheep = 1,
Cow = 2,
Chicken = 3
}

然后检查您的输入是否有效。

关于c# - Web API - 复杂类型枚举的表单编码输入允许无效值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27508655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com