c# - Web API 自定义验证以根据批准的值列表检查字符串

标签 c# asp.net-mvc asp.net-mvc-4 asp.net-web-api

我想验证 Web API REST 命令的输入。我希望它能像下面的 State 一样工作,并用限制参数有效值的属性进行装饰。

public class Item {
    ...

    // I want State to only be one of "New", "Used", or "Unknown"
    [Required]
    [ValidValues({"New", "Used", "Unknown"})]
    public string State { get; set; }

    [Required]
    public string Description { get; set; }

    ...
}

有没有一种方法可以在不违背 Web API 的原则的情况下做到这一点。理想情况下,该方法类似于 Ruby on Rails 的 custom validation .

最佳答案

创建一个派生自 ValidationAttribute 的自定义验证属性并覆盖 IsValid 成员函数。

public class ValidValuesAttribute: ValidationAttribute
{
  string[] _args;

  public ValidValuesAttribute(params string[] args)
  {
    _args = args;
  }

  protected override ValidationResult IsValid(object value, ValidationContext validationContext)
  {
    if (_args.Contains((string)value))
      return ValidationResult.Success;
    return new ValidationResult("Invalid value.");
  }
}

然后你可以做

[ValidValues("New", "Used", "Unknown")]

以上代码未经编译或测试。

关于c# - Web API 自定义验证以根据批准的值列表检查字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17243665/

相关文章:

c# - 验证大整数的二进制模式 (BigInteger)

c# - 如何表示与 Entity Framework 的一对多关系?

c# - 如何捕获 ClearScript.V8 中的更新事件?

c# - LINQ to JSON - 选择个别属性属于导航属性

c# - MVC Controller 未绑定(bind) ViewModel

asp.net-mvc - Html.BeginForm() 和 ajax.beginform() 之间的区别

c# - 在 IIS 中部署后 Web API 访问被拒绝错误

c# - ASP.NET MVC 中的 CheckBox 列表并将其绑定(bind)回 Controller

c# - 打印到网络(共享)打印机 - Word Interop

c# - 在 ASP.net MVC 中划分大任务的最佳实践