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
与在控制器的操作中进行这些验证检查相比,以属性形式为我们的模型使用自定义数据验证有什么好处?
一个小例子。
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