如何在Asp.NetCore中为EnEnumerable添加每个元素的验证



我有一个将从body映射的字段:

[Required]
public IReadOnlyCollection<long?> Ids { get; set; }

我想向元素本身添加一个必需的属性(或者更确切地说,任何任意的验证属性((即,我希望数组的每个元素都经过验证(。

我可以创建一个有Id的类,但之后我需要从JSON传递一个对象数组,而理想情况下我希望得到一个像[1,2,3,4]这样的数组。

有没有可能耍点小把戏,我没能弄明白?

您可以创建一个自定义属性,该属性将检查IEnumerable:上的非null

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
sealed public class NonNullElementsAttribute : ValidationAttribute{
public override bool IsValid(object value)
{
// cast object to IEnumerable
// Validate your logic.
}
}

你可以把这个属性放在你的元素的顶部

[Required]
[NonNullElements]
public IReadOnlyCollection<long?> Ids { get; set; }

通过使其成为验证每个元素的更通用的检查列表,您可以使其更通用。例如,对于字符串类型,您可能需要字符串。IsNullOrWhiteSpace