正则表达式数据验证属性不会返回错误消息

时间:2014-04-07 09:25:58

标签: asp.net-mvc validation data-annotations model-validation

我有我的模特:

[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 AttributeExeption文字为"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

找到更多信息

0 个答案:

没有答案