用于检查是否在一组值内的数据注释

Data annotation to check if within set of values

在使用数据注释属性验证 string 属性时,有谁知道验证字符串是一组可能值之一的方法,可能表示为数组或分隔字符串?

这个问题更通用,但我 运行 进入的特定实例是 属性 可以包含 HTTP 方法的子集;具体来说,GETPOSTPUTPATCHDELETE.

System.ComponentModel.DataAnnotations 命名空间中,我看到 RegularExpressionAttribute 我可以将其子类化并动态创建 RegEx,但想知道我是否遗漏了一些已经存在的东西。

答案不限于.NET 框架。第 3 方库甚至自定义代码都是可以接受的,但越接近标准(在这种情况下意味着被很好地采用)越好。

谢谢

您可以使用 Remote Validation 来达到这个目的:

[System.Web.Mvc.Remote("Check", "yourModel",
                        HttpMethod = "POST",
                        ErrorMessage = "Username is not available.")]
public string Name { set; get; }

并且:

public ActionResult Check(string name)
{
     string[] names = {"name1", "name2", "name3"};//set of possible values

     //validate the string is one of a set of possible values
     if (names.Contains(name.ToLowerInvariant())) return Json(false);
     //...
     return Json(true);
}

您还可以使用 AdditionalFields 获取或设置验证所需的附加字段。 AdditionalFields 属性 是字符串 属性 可以为多个字段提供。

看起来继承 RegularExpressionAttribute 是要走的路线,或者像 Steven Muecke 在评论中所说的那样从头开始构建我自己的路线。

作为旁注,我最终出于其他原因进行了重构,不再需要注释。但当我 运行 遇到没有明显和直接解决方案的问题时,情况往往如此。

在我的代码中我这样使用:

[Required]
[RegularExpression("GET|POST|PUT|PATCH|DELETE", ErrorMessage = "Only http method allowed.")]
public string method { get; set; }

注意:如果将空字符串传递给 method 则不会显示错误消息,然后我使用 [Required] 标签。