我见过很多像这样的问题,但没有答案解决了我的问题。 我可以提交一个包含空格的名称,或者将描述字段留空,并且ModelState仍然有效。
在我的StartUp.cs中我使用
services.AddMvc();
我没有使用Validator.TryValidateObject尝试,并且Model.State始终有效。
我的班级有数据注释
public class UpdateAttributeResource
{
[Required, MaxLength(96), RegularExpression(@"^[A-Za-z0-9~_$\-]*$")]
public string Name;
[Required, MaxLength(96)]
public string DisplayName;
[Required, MaxLength(160)]
public string DescriptionEn;
[Required, MaxLength(160)]
public string DescriptionFr;
public string Comments;
}
我的控制器收到了我的类的集合,即使使用TryValidateObject强制验证,ModelState仍然有效
public IActionResult UpdateAttributes([FromBody]UpdateAttributeResource[] updateAttributes)
{
var validationContext = new ValidationContext(updateAttributes[0], null, null);
var validationResults = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(updateAttributes[0], validationContext, validationResults, true);
if (!isValid)
{
ModelState.AddModelError("NOPE", "Nope");
return BadRequest(ModelState);
}
答案 0 :(得分:4)
我终于在这里找到了答案 DataAnnotations tryvalidateobject always returns true
我不知道为什么它之前没有弹出,无论如何
验证器忽略字段上的[RequiredAttribute] - 它需要 进入一个帐户只有属性;
所以我只需要将课程改为
public class UpdateAttributeResource
{
[Required, MaxLength(96), RegularExpression(@"^[A-Za-z0-9~_$\-]*$")]
public string Name { get; set; }
[Required, MaxLength(96)]
public string DisplayName { get; set; }
[Required, MaxLength(160)]
public string DescriptionEn { get; set; }
[Required, MaxLength(160)]
public string DescriptionFr { get; set; }
public string Comments;
}