ASP.NET Core 中自定义验证属性相对于手动验证的优势?

Benefits of Custom Validation attributes over manual validation in ASP.NET Core?

与在控制器的操作中进行这些验证检查相比,以属性形式为我们的模型使用自定义数据验证有什么好处?

一个小例子。

public class CollectionHasElementsAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value is IList<string> stringCollection)
        {
            return stringCollection.Count > 0
        }

        return false;
    }
}

对比

public IActionResult someAction(List<string> stringCollection)
{
    if (stringCollection.Count <= 0)
    {
        // return your error the way you want to here
    }
}

主要原因是简单并遵循 DRY 原则。假设您有 10 个控制器使用 List<string> stringCollection 执行您的业务逻辑,现在您必须手动编写 if() 在所有 10 个控制器中一次又一次地执行此操作。

对于属性,您只需在验证完成的地方写入 if() 一次,然后添加属性即可。

比编写自己的验证条件更好的替代方法是使用像 FluentValidation -> Docs

这样的库

如果你想看到更多像这样令人惊叹的库,checkout this list