我有一个带有POST方法的简单控制器。
我的模型具有枚举类型的属性。
当我发送有效值时,一切都按预期工作。
{ "MyProperty": "Option2"}
或者
{ "MyProperty": 2}
如果我发送一个无效的字符串
{ "MyProperty": "Option15"}
如果我传递一个无效的整数,它会保留该无效值,但是如果传递有效值,则会正确获取默认值(Option1)。
{ "MyProperty": 15}
我能避免这种情况并获取默认值或抛出错误吗?
谢谢
public class ValuesController : ApiController
{
[HttpPost]
public void Post(MyModel value) {}
}
public class MyModel
{
[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
public MyEnum MyProperty { get; set; }
}
public enum MyEnum
{
Option1 = 0,
Option2,
Option3
}
更新
我知道我可以将任何int转换为枚举,这不是问题。
@AakashM的建议解决了我的一半问题,我之前不知道AllowIntegerValues。
现在当我发布无效的int时,我会正确地收到错误提示。
{ "MyProperty": 15}
现在唯一有问题的情况是当我发送一个字符串,它是一个数字时(这很奇怪,因为当我发送一个无效的非数字字符串时,它会正确地失败)。
{ "MyProperty": "15"}
AllowIntegerValues
的情况下实现。C#枚举的标准行为并未受到转换器的影响 —— 就像你可以编写MyEnum hmm = (MyEnum)15;
一样,转换器也允许在这里使用15
。 - AakashM