ASP.NET中字段的允许值

rn0zuynd  于 2023-05-30  发布在  .NET
关注(0)|答案(3)|浏览(177)

在ASP.NETMVCCore中是否有任何数据注解用于允许的值?由于SQL Server中没有枚举,因此我无法将带有枚举字段的类迁移到数据库中。我想给类中的字段给予可能/允许的值。有什么办法可以做到这一点吗?

public class Employee
    {
        [Key]
        public int ID { get; set; }

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

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

    }

我想提供ActiveInactive作为Status字段的唯一可能值。

q8l4jmvw

q8l4jmvw1#

你也可以使用下面的正则表达式来实现这一点:

[Required]
[RegularExpression("Active|Inactive", ErrorMessage = "Invalid Status")]
 public string Status { get; set; }

更多细节可以通过找到here

xoefb8l8

xoefb8l82#

正如@ps2goat所提到的,您可以在数据库上使用检查约束。但是,对于进入API的模型,您可能仍然希望在那里提供验证。理想情况下,您将在合理范围内尽可能地防止坏数据进入数据层。您没有提到是否使用n层架构,或者您的控制器是否直接引用数据模型。无论哪种方式,我相信这个自定义属性都可以在API层或实体模型上使用。
This是一个很好的答案,它解释了如何创建自定义验证属性。这是一个古老的答案,但它仍然适用于.Net Core。here是.Net Core中自定义验证属性的答案。它基本上看起来像这样:

public class EmployeeStatusAttribute : ValidationAttribute
{
    private string[] _allowedValues;

    public EmployeeStatusAttribute(string[] allowedValues)
    {
        _allowedValues = allowedValues;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var employee = value as Employee;
        if (_allowedValues.Contains(employee.Status))
        {
            return ValidationResult.Success;
        }
        return new ValidationResult(`{employee.Status} is not a valid status`);
    }
}

在你的模型中:

public class Employee
{
    ...

    [EmployeeStatus("Active", "Inactive")]
    public string Status { get; set; }

    ...
}
l7wslrjt

l7wslrjt3#

在.NET 8 Preview 2中,您可以使用AllowedValues属性。

[Required]
[AllowedValues("Active", "Inactive")]
public string Status { get; set; }

更多信息:https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-preview-2/#allowedvaluesattribute-and-deniedvaluesattribute。

相关问题