下面我将详细讲解“ASP.NET Core实现自定义WebApi模型验证”的完整攻略,过程中会包含两个示例。
1. 什么是ASP.NET Core模型验证
ASP.NET Core模型验证是用于验证传输到WebApi中的请求体或URL参数的数据是否符合应用程序中设定的数据模型。当数据验证失败时,ASP.NET Core会返回非200的状态码及一条错误信息。
2. 如何实现ASP.NET Core自定义模型验证
在ASP.NET Core中,我们可以通过实现 IActionFilter
和 IValidatableObject
接口来实现自定义模型验证。
2.1. 实现IActionFilter接口
我们可以通过实现 IActionFilter
接口来检查WebApi中传入的请求。当接口实现时,我们可以重写 OnActionExecuting
方法,并进行自定义的模型验证逻辑。
实例如下:
public class CustomValidationFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// 检查WebApi中传入的请求
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
2.2. 实现IValidatableObject接口
我们可以通过实现 IValidatableObject
接口来进行自定义模型验证逻辑,并将错误信息放入 yield return
中返回。若数据验证失败,则ASP.NET Core会返回非200的状态码及一条错误信息。
实例如下:
public class PersonModel : IValidatableObject
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var validationErrors = new List<ValidationResult>();
// 自定义模型验证逻辑
if (Age < 0 || Age > 120)
{
validationErrors.Add(new ValidationResult($"The Age must be between 0 and 120"));
}
return validationErrors;
}
}
3. ASP.NET Core模型验证的应用
我们可以通过在WebApi Controller中对需要进行数据验证的请求添加我们自定义的 IActionFilter
或者 IValidatableObject
接口来使用ASP.NET Core模型验证。
3.1. IActionFilter应用示例
CustomValidationFilter
是我们上面已声名的自定义模型验证逻辑。在以下示例中,我们对 POST /people
进行了自定义模型验证。
[HttpPost("/people")]
public ActionResult CreatePerson([FromBody] PersonModel person)
{
// 在需要进行模型验证的请求中添加我们自定义的 IActionFilter 接口
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// 进行创建操作
// ...
}
3.2. IValidatableObject应用示例
在以下示例中,我们通过实现 IValidatableObject
接口,在对 POST /people
请求中验证了 PersonModel
数据模型。
[HttpPost("/people")]
public ActionResult CreatePerson([FromBody] PersonModel person)
{
var validationResults = person.Validate(new ValidationContext(person, null, null));
if (validationResults.Any())
{
var errors = validationResults.Select(v => v.ErrorMessage).ToList();
return BadRequest(errors);
}
// 创建操作
// ...
}
在以上两个示例中,我们都对请求中的 PersonModel
进行了自定义模型验证,在验证成功的情况下才可以进行创建操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core实现自定义WebApi模型验证详解 - Python技术站