c# - 验证特定字符串值的模型

标签 c# asp.net-web-api2

我正在从事 Web API 2 项目。除了要求某些属性是必需的之外,有些属性只能具有特定值。 一种选择是我可以尝试将模型保存到数据库 (EF6) 并在保存时创建一些逻辑,但我认为最好在调用数据库之前验证是否设置了正确的值。数据注释是否提供像 Range 这样的属性,然后像下面的示例那样提供特定的字符串值?还是我必须编写自己的验证器属性?

public class Person {
    public int PersonID { get; set; }

    [Required]
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [StringRange("M","F")]
    public string Gender { get; set; }
}

在上面的示例中,当向 Controller 发送消息时,唯一接受的值是“M”或“F”。

最佳答案

以防将来有人偶然发现此线程,我进一步研究并添加了一个公共(public)字符串数组属性,用于在验证过滤器中接受允许的值。这将允许您在属性装饰器中提供有效字符串的集合。

这样,您现在就有了一个通用的可重用属性,您可以随时使用它来将模型字符串属性限制为一组预定义的值。由于它是一个验证属性,您还可以使用信息量更大的错误消息来装饰它。

示例用法:

public class Person {
    [StringRange(AllowableValues = new[] { "M", "F" }, ErrorMessage = "Gender must be either 'M' or 'F'.")]
    public string Gender { get;set; }
}

字符串属性:

public class StringRangeAttribute : ValidationAttribute
{
    public string[] AllowableValues { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (AllowableValues?.Contains(value?.ToString()) == true)
        {
            return ValidationResult.Success;
        }

        var msg = $"Please enter one of the allowable values: {string.Join(", ", (AllowableValues ?? new string[] { "No allowable values found" }))}.";
        return new ValidationResult(msg);
    }
}

关于c# - 验证特定字符串值的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987119/

相关文章:

c# - 使用 webapi 和引导日期选择器在 angularjs 中绑定(bind)日期

c# - 添加对 Web 服务的引用

c# - Xamarin.Forms UWP 项目 当前不会命中断点。没有为该文档加载任何符号

C# 代码生成器/格式化程序

.net - 使用 ninject 解决 OWIN WEB API Startup.cs 中的依赖关系

c# - Web API 中的自定义 IAuthenticationFilter 和 AllowAnonymous

iis-7 - WebAPI application_start 未在 IIS 服务器上执行

c# - WebAPI - 如何从 token 中获取 UserID

c# - 通过反射查找asp.net webform方法

c# - 是否可以在 C# 中为变量创建别名?