WebApi参数检查验证FluentValidation的使用方法
右键打开NuGet程序包管理,进入浏览,搜索 FluentValidation,点击下载
在Model文件夹添加一个Person类进行校验
校验前,using需要引入相应的命名空间方可使用,AbstractValidators叫对象验证器的基类需要继承它,针对属性进行校验,并且输出相应的错误提示
using FluentValidation; using FluentValidation.Attributes; namespace Demo.Models { [Validator(typeof(PersonValidator))] public class Person { public int Id { get; set; } public string Name { get; set; } } public class PersonValidator : AbstractValidator{ //构造方法 public PersonValidator() { RuleFor(m => m.Id).NotEmpty().NotNull().WithMessage("ID不能为空"); RuleFor(m=>m.Name).NotEmpty().NotNull().WithMessage("姓名不能为空"); } } }
创建Filter文件夹,在文件夹里面创建一个特性类,对验证进行筛选。。定义特性类后缀:Attribute
using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http.Controllers; using System.Web.Http.Filters; namespace Demo.Filter { //定义特性类筛选器 public class ParamsFilterAttribute:ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { //提供参数非法 if (!actionContext.ModelState.IsValid) { actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState); } //没有提供参数 else if (actionContext.ActionArguments.Values.First()==null) { actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,"请输入参数"); } } } }
创建一个Api控制器,将刚刚定义的特性类在此方法中表示,[FromBody]作用:表示该参数值可在Body中获取,而不是从通过Url中获取
using Demo.Filter; using Demo.Models; using System.Web.Http; namespace Demo.Controllers { public class FluentController : ApiController { [HttpPost] [ParamsFilter] public IHttpActionResult Validation([FromBody] Person person) { return Json(person); } } }
以上操作完成后,启用Postman进行接口调试看看效果
验证通过:
验证非法:
如有错误,请指正谢谢。。。