Web Api 2:值类型的[必需]?
Web Api 2: [Required] for value types?
在 Web Api 输入模型中使用 [Required]
数据注释似乎只检查实例化为 null 的引用类型:
public class MyInputModel
{
[Required] // This works! ModelState fails.
public CustomClass MyCustomProperty { get; set; }
}
我们如何才能在没有默认实例化的情况下使用值类型?
public class MyInputModel
{
[Required] // This is ignored because MyDouble is defaulted to 0
public double MyDouble { get; set; }
}
难道只有使用Nullable<Double>
才行吗?我们不能创建一些自定义验证属性吗?
你可以使用范围属性。
[Range(0, 99)]
public double MyDouble { get; set; }
这就是所需属性在内部工作的方式。
override bool IsValid(object value) {
if (value == null) {
return false;
}
// only check string length if empty strings are not allowed
var stringValue = value as string;
if (stringValue != null && !AllowEmptyStrings) {
return stringValue.Trim().Length != 0;
}
return true;
}
因此与 0 值无关,因此您必须使用 Range 属性检查它
尝试使值类型为 Nullable,例如public double? MyDouble { get; set; }
在 Web Api 输入模型中使用 [Required]
数据注释似乎只检查实例化为 null 的引用类型:
public class MyInputModel
{
[Required] // This works! ModelState fails.
public CustomClass MyCustomProperty { get; set; }
}
我们如何才能在没有默认实例化的情况下使用值类型?
public class MyInputModel
{
[Required] // This is ignored because MyDouble is defaulted to 0
public double MyDouble { get; set; }
}
难道只有使用Nullable<Double>
才行吗?我们不能创建一些自定义验证属性吗?
你可以使用范围属性。
[Range(0, 99)]
public double MyDouble { get; set; }
这就是所需属性在内部工作的方式。
override bool IsValid(object value) {
if (value == null) {
return false;
}
// only check string length if empty strings are not allowed
var stringValue = value as string;
if (stringValue != null && !AllowEmptyStrings) {
return stringValue.Trim().Length != 0;
}
return true;
}
因此与 0 值无关,因此您必须使用 Range 属性检查它
尝试使值类型为 Nullable,例如public double? MyDouble { get; set; }