请求参数验证
在数据接口中需要做大量的数据请求验证,而这些工作又相当繁琐和比较大的工作量。组件对WebApi集成了控制器参数验证功能,只需要简单地在参数上标记相关属性即可完成验证。
登陆参数验证
public bool Login( [StringRegion(Min = 6)]string name, [StringRegion(Min = 6)] string pwd) { return true; }
以上验证是要求用户和密码长度都必须大于等于6.
注册参数验证
[Post] public bool Register( [StringRegion(Min = 6)]string name, [StringRegion(Min = 6)]string pwd, [EmailFormater]string email, [MPhoneFormater]string phone, [UrlFormater]string homePage) { return true; }
以上方法对注册信息包括邮件,手机等进行一个格式的验证
集成的验证类
Non,StringRegion,NumberRegion,DoubleRegion,DateRegion,Regex
HourFormater,UrlFormater,PasswordFormater,PhoneFormater,MPhoneFormater
IDCardFormater,DateFormater,EmailFormater,IPFormater
组件只是提供了一些基础简单的验证
自定义验证
由于业务的多样性,对于数据的验证需求也是非常多的,为了解决这一问题组件支持自定义验证规则;只需要继承ValidationBase属性实现相关验证方法即可,以下是ValidationBase的一些规则
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = true)] public abstract class ValidationBase : Attribute { public bool Non { get; set; } = true; public int Code { get; set; } = 412; public virtual string GetResultMessage(string parameter) { return ""; } public virtual bool Execute(object data) { return Non && data != null; } }
接下来看一下DateRegion是如何实现的
public class DateRegion : ValidationBase { public DateRegion() { } public string Min { get; set; } public string Max { get; set; } public override string GetResultMessage(string parameter) { if (Min != null && Max != null) return $"The '{parameter}' value must between in ({Min},{Max})"; else if (Min != null) return $"The '{parameter}' value must >= {Min}"; else return $"The '{parameter}' value must <= {Max}"; } public override bool Execute(object data) { if (!Non && data == null) return true; if (data == null) return false; DateTime value = (DateTime)data; bool result = true; if (Min != null) { result = value >= DateTime.Parse(Min); if (!result) return false; } if (Max != null) result = value <= DateTime.Parse(Max); return result; } }
当实现规则后只需要把属性标记在参数上即可
自定义输出
不同业务针对错误响应的数据格式也有不同,组件同样提供这个输出的定义,只需要实现IValidationOutputHandler接口即可;默认实现如下:
public class ValidationOutputHandler : IValidationOutputHandler { public void Execute(IHttpContext context, IActionResultHandler handler, ValidationBase validation, ParameterInfo parameterInfo) { ActionResult actionResult = new ActionResult(validation.Code, validation.GetResultMessage(parameterInfo.Name)); handler.Success(actionResult); } }
自定义好输出的方式后,只需要设置到相关HttpServer上即可生效,
mApiServer.ValidationOutputHandler = new ValidationOutputHandler();
访问Beetlex的Github

浙公网安备 33010602011771号