参数模型检验过滤器 .NetCore版
2024-08-24 11:27:19
最近学习 .NETCore3.1,发现过滤器的命名空间有变化。
除此以外一些方法的名称和使用方式也有变动,正好重写一下。
过滤器的命名空间的变化
原先:System.Web.Http.Filters;
现在:Microsoft.AspNetCore.Mvc.Filters;
代码实现
注意:本 Demo 只是个人学习测试
基类控制器
在基类控制器上添加[ParaModelValidate]特性:
(.NetCore3中没有JsonResult,从使用习惯出发,使用自己写的JsonContentResultBuilder返回JSON格式的ContentResult)
/// <summary>
/// 基类控制器
/// </summary>
[ParaModelValidate]
[ErrorCatch]
public class BaseController : ControllerBase
{
public ContentResult JsonResult(dynamic data = null)
{
ContentResult result = JsonContentResultBuilder.BuildViewJsonResult(data); return result;
}
}
基类控制器
控制器接口
public class DemoController : BaseController
{ public ActionResult Login(DemoParaModel paraModel)
{ List<int> ss = new List<int>() { 1, 2, 3, 4, 5 }; return JsonResult(ss);
}
}
DemoController
特性[ParaModelValidate]
/// <summary>
/// 参数模型检验过滤器 NetCore版
/// </summary>
public class ParaModelValidateAttribute : ActionFilterAttribute
{ public override void OnActionExecuting(ActionExecutingContext filterContext)
{ //本方法的所有参数描述符
IList<ParameterDescriptor> actionParameters = filterContext.ActionDescriptor.Parameters; //只有这个方法需要参数的时候才进行校验
if (actionParameters.Count != 0)
{ dynamic paraModel = filterContext.ActionArguments.FirstOrDefault().Value; ParaModelValidateHelper.Validate(paraModel); } } }
参数模型校验帮助类
public static class ParaModelValidateHelper
{
/// <summary>
/// 参数模型校验
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static void Validate<T>(T entity) where T : class
{
Type type = entity.GetType();
PropertyInfo[] properties = type.GetProperties(); //循环模型的所有参数
foreach (var item in properties)
{ //校验必填参数
if (item.IsDefined(typeof(RequiredAttribute), true))//判断该参数是否有Required特性
{ var value = item.GetValue(entity);//获取值
if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
{ throw new Exception(string.Format("缺少必填参数{0}", item.Name)); }
} //增加其他类型的校验的话接着加else if,如果常用校验很多可以改为switch
//System.ComponentModel.DataAnnotations } }
}
参数模型
public class DemoParaModel
{
/// <summary>
/// 必填参数
/// </summary>
[Required]
public string ID { get; set; }
}
最新文章
- Zabbix监控redis status
- Oracle索引碎片检查及定期重建常用表的索引
- Redis Cluster架构和设计机制简单介绍
- Android Studio 将工程作为第三方类库的步骤
- [转]Java汉字按照拼音排序
- VFL(Visual Format Language)语言
- 【lucene系列学习二】Lucene实现高亮显示关键词
- Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理
- MacOS 下安装mysqlclient 的问题及解决办法
- Django 基础二(View和urls)
- Add AI feature to Xamarin.Forms app
- JSON &; XML
- Java类加载双亲委托模式优点
- failed to launch: nice -n 0 /home/hadoop/spark-2.3.3-bin-hadoop2.7/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://namenode1:7077
- PyQt5--QColorDiaglog
- 推荐一个不错的关于Excel数据统计分析的公众号
- 在eclipse中修改生成的注释类、方法的作者、时间
- Ctrl+Z 暂停程序及重启程序【转】
- BigDecimal常用操作
- MonoDevelop 的一些设置
热门文章
- RabbitMQException com.rabbitmq.client.ShutdownSignalException: connection error; protocol meth
- javascript笔记day01
- Java与C#
- 在 easyui中获取form表单中所有提交的数据 拼接到table列表中
- WIN10系统下静态编译Qt4.8.7
- springboot文件上传问题记录
- JDBC数据连接之增删改查MVC
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
- JVM笔记——类加载
- body-parser 源码分析