请求参数验证
在数据接口中需要做大量的数据请求验证,而这些工作又相当繁琐和比较大的工作量。组件对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();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-09-17 dotnet core高吞吐Http api服务组件FastHttpApi
2014-09-17 azure存储压测的问题(农码主观意识太强被坑了)