我有一个带有整数输入数组的控制器方法,该方法不能为null或大于10个元素的大小.为了验证输入,我做了一堂课:
public class TestForm
{
[Required]
[MaxLength(10)]
public long[] feedIds { get; set; }
}
和控制器方法:
[HttpPost]
public async Task<IActionResult> DoSomeJob(TestForm form)
{
//Do some job
}
根据MSDN,System.ComponentModel.DataAnnotations.MaxLength可以用于数组,但是没有验证,它会获取null和任何大小的数组.我究竟做错了什么?
解决方法:
这是我们在一个项目中使用的东西:
public class LengthAttribute : ValidationAttribute {
readonly int length;
public LengthAttribute(int length) {
this.length = length;
}
public override bool IsValid(object value) {
if (value is ICollection == false) { return false; }
return ((ICollection)value).Count == length;
}
}
在如下所示的属性上:
public class CreateUserApiRequest : ApiRequest {
[DataMember]
[Length(128)]
[Description("クライアントキー")]
public byte[] clientKey { get; set; }
....