Asp.net 在Web api控制器中手动验证模型
我有一个名为“User”的类和一个属性“Name”Asp.net 在Web api控制器中手动验证模型,asp.net,asp.net-mvc,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Web Api,我有一个名为“User”的类和一个属性“Name” public class User { [Required] public string Name { get; set; } } api控制器方法是 public IHttpActionResult PostUser() { User u = new User(); u.Name = null; if (!ModelState.IsValid) return B
public class User
{
[Required]
public string Name { get; set; }
}
api控制器方法是
public IHttpActionResult PostUser()
{
User u = new User();
u.Name = null;
if (!ModelState.IsValid)
return BadRequest(ModelState);
return Ok(u);
}
如何手动验证用户对象,以便ModelState.IsValid向我返回false?该模型应该是ActionMethod的输入参数,并且ModelState.IsValid将根据您在模型类中设置的属性进行验证,在这种情况下,当它设置为[必需]时,它将根据空值进行验证 如果您只想手动检查是否有值,可以直接检查
if (user.Name == null) {
return;
}
您需要将自定义验证属性定义为
class CustomValidatorAttribute : ValidationAttribute
{
//custom message in ctor
public CustomValidator() : base("My custom message") {}
public CustomValidator(string Message) : base(Message) {}
public override bool IsValid(object value)
{
return !string.IsNullOrWhiteSpace(value.ToString());
}
//return a overriden ValidationResult
protected override ValidationResult IsValid(Object value,ValidationContext validationContext)
{
if (IsValid(value)) return ValidationResult.Success;
var message = "ohoh";
return new ValidationResult(message);
}
}
同样在你的模型课上
public class User
{
[Required]
[CustomValidator("error")]
public string Name { get; set; }
}
您可以使用类的方法手动验证模型并设置
此答案不适用于这种情况,但如果您想手动验证参数,则此答案非常相关:
public IHttpActionResult Post(User user)
{
ModelState.Clear(); // remove validation of 'user'
// validation is done automatically when the action
// starts the execution
// apply some modifications ...
Validate(user); // it adds new keys to 'ModelState', it does not update any keys
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// ...
}
为什么要手动创建
User
对象?如果是模型,用户将成为postaser
方法的输入参数。您想知道如何根据数据注释指定的规则(例如,[Required]
)验证任意对象吗?这只是一个示例。我正在按照这个toturial上传一个文件。如果你看到这里,我们使用var“fileUploadObj=GetFormData(result);”得到模型数据。为了简单起见,我创建了这个问题。@muzafarkan您的简化示例打破了您的问题-如果您想验证它,您的用户应该是一个参数。所以我们不能手动验证对象?thanx…这就是我想要的:)this.validate(objectToValidate);这就是你所需要的!需要ModelState.Clear();验证前(u);此外,“this.”在这里完全没有意义,除非我遗漏了什么,否则这应该是对已接受答案的评论,在某些情况下,您可能希望清除模型状态
public IHttpActionResult Post(User user)
{
ModelState.Clear(); // remove validation of 'user'
// validation is done automatically when the action
// starts the execution
// apply some modifications ...
Validate(user); // it adds new keys to 'ModelState', it does not update any keys
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// ...
}