在ASP.NET Core中,开发Web API时,对模型数据进行验证是确保输入数据正确性和安全性的重要环节。在本文中,我们将深入探讨如何在ASP.NET Core中实现自定义Web API模型验证,以便根据业务需求定制验证规则。 在.NET Framework时代,我们通常会使用`ModelState.IsValid`属性来检查模型数据是否有效,如下面的示例所示: ```csharp [HttpPost] public async Task<JsonResult> SaveNewCustomerAsnyc(AddCustomerInput input) { if (!ModelState.IsValid) { return Json(Result.FromCode(ResultCode.InvalidParams)); } // ... } ``` 或者,我们可以创建一个实现了`IActionFilter`接口的过滤器,如`ApiValidationFilter`,来拦截请求并在验证失败时返回错误响应: ```csharp public class ApiValidationFilter : IActionFilter { // ... public async Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation) { // ... if (!actionContext.ModelState.IsValid) { var error = actionContext.ModelState.GetValidationSummary(); var result = Result.FromError($"参数验证不通过:{error}", ResultCode.InvalidParams); return actionContext.Request.CreateResponse(result); } return await continuation(); } } ``` 然而,在ASP.NET Core中,模型验证有了更现代、更灵活的方法。我们需要定义一个自定义验证特性(Attribute),继承自`System.ComponentModel.DataAnnotations.ValidationAttribute`。例如,我们可能想要创建一个验证邮箱地址的特性: ```csharp public class IsValidEmailAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { var email = value as string; if (string.IsNullOrEmpty(email)) { return ValidationResult.Success; } if (!Regex.IsMatch(email, @"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")) { return new ValidationResult("提供的邮箱格式无效"); } return ValidationResult.Success; } } ``` 接下来,我们在模型类中应用这个自定义验证特性: ```csharp public class AddCustomerInput { [Required] [StringLength(100)] public string Name { get; set; } [Required] [IsValidEmail] public string Email { get; set; } } ``` 在控制器中,我们不再需要手动检查`ModelState.IsValid`,因为ASP.NET Core框架会在尝试执行操作方法之前自动进行验证: ```csharp [HttpPost] public async Task<IActionResult> SaveNewCustomerAsnyc(AddCustomerInput input) { // 如果模型数据无效,ASP.NET Core会自动返回一个包含错误信息的400 Bad Request响应 // ... } ``` 此外,ASP.NET Core还提供了`ModelStateDictionary`的扩展方法,如`ModelStateExtensions.GetValidationSummary()`,用于获取模型验证的错误信息,这在自定义过滤器或返回错误响应时非常有用。 ASP.NET Core提供了更强大的模型验证机制,允许开发者自定义验证逻辑,并能轻松地集成到Web API的处理流程中。通过创建自定义验证特性,我们可以确保输入数据符合业务规范,从而提高应用程序的健壮性和用户体验。在实际项目中,可以根据需求进一步扩展验证规则,以适应各种复杂的场景。
- 粉丝: 8
- 资源: 953
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Java 基础入门指南:为新手小白准备的详细教程.pdf
- 基于Vue的uniapp组件库设计源码收集与整理
- 毕业设计这是一个基于Vue和Node.js的轻量级点餐系统.zip
- 基于Python和DRF框架的meiduo_mall电子商务平台设计源码
- 基于Java语言的Android开发学习笔记设计源码
- 小程序开发基础入门指南:为新手小白准备的详细教程.pdf
- 基于Vue框架的宿舍管理系统设计源码
- 基于Python+JavaScript的婚恋交友平台设计源码
- 毕业设计视频监控系统,qt + v4l2 + opencv + sqlite.zip
- OpenCV 基础入门指南:为新手小白准备的详细教程.pdf