我有我的模特:
[RegularExpression("[0-9]+", ErrorMessage = "GroupId must be a number")]
public int? GroupId { get; set; }
和WebApi应用程序。我希望控制器返回如下错误信息:
{
"$id": "1",
"Message": "GroupId must be a number"
}
例如,当我有Required
属性时,它可以正常工作:
[Required]
[StringLength(64, MinimumLength = 1, ErrorMessage = "Name must be between 1 and 64 characters long.")]
public string Name { get; set; }
{
"$id": "1",
"Message": "The Name field is required."
}
并且ReqularExpression
无效。
我也尝试过:
[RegularExpression(@"^[0-9]+$", ErrorMessage = "GroupId must be a number")]
[RegularExpression("[0-9]+", ErrorMessage = "GroupId must be a number")]
[RegularExpression(@"^([0-9]+)$", ErrorMessage = "GroupId must be a number")]
我的WebApi控制器上有自定义ActionFilterAttribute
。
它使用HttpActionContext actionContext.modelState
创建响应。
modelState.Values [0] .Errors [0]。null
的加密值为Regex Attribute
,Exeption
文字为"Could not convert string to integer: Path 'GroupId '.
有人能告诉我这有什么问题吗?
PS
我创建了自定义验证属性:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
int parseResult;
if (!int.TryParse(value.ToString(), out parseResult))
return new ValidationResult("Value must be a number");
}
return ValidationResult.Success;
}
如果指定了非数字值,则object value
现在null
。
另外我试过DataAnnotationsExtensions包,它没有帮助。
P.S.S。
显然,因为model binding
发生在validation
之前。
您可以在Server side validation of int datatype