ModelState.IsValid 在使用数据注释时始终为真,MVC 作为 Web API
ModelState.IsValid is always true while using Data annotation, MVC as Web API
我见过很多这样的问题,但没有一个答案能解决我的问题。
我可以提交一个包含 space 的名称,或者将描述字段留空并且 ModelState 仍然有效。
在我的 StartUp.cs 中我使用
services.AddMvc();
我试过没有 Validator.TryValidateObject,Model.State 总是有效的。
我的class有数据标注
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;
}
我的控制器接收到我的 class 的集合,即使在使用 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);
}
其实我终于在这里找到了答案
之前不知道为什么不弹出,反正
The validator ignores the [RequiredAttribute] on fields - it takes
into an account only properties;
所以我只需要将 class 更改为
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;
}
我见过很多这样的问题,但没有一个答案能解决我的问题。 我可以提交一个包含 space 的名称,或者将描述字段留空并且 ModelState 仍然有效。
在我的 StartUp.cs 中我使用
services.AddMvc();
我试过没有 Validator.TryValidateObject,Model.State 总是有效的。
我的class有数据标注
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;
}
我的控制器接收到我的 class 的集合,即使在使用 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);
}
其实我终于在这里找到了答案
之前不知道为什么不弹出,反正
The validator ignores the [RequiredAttribute] on fields - it takes into an account only properties;
所以我只需要将 class 更改为
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;
}