参数模型检验过滤器 .NetCore版
最近学习 .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; }
}
参数模型检验过滤器 .NetCore版的更多相关文章
- 错误捕捉过滤器 .NetCore版
前言 继承ExceptionFilterAttribute后,重写OnException函数. 统一捕捉所有报错,格式化返回前端. 代码实现 基类控制器 在基类控制器上添加[ErrorCatch]特性 ...
- NetCore版RPC框架NewLife.ApiServer
微服务和消息队列的基础都是RPC框架,比较有名的有WCF.gRPC.Dubbo等,我们的NewLife.ApiServer建立在网络库NewLife.Net之上,支持.Net Core,追求轻量级和高 ...
- [原创]大数据:布隆过滤器C#版简单实现。
public class BloomFilter { public BitArray _BloomArray; public Int64 BloomArryLength { get; } public ...
- 第16 天 JavaWEB过滤器和监听器技术
Day16 JavaWEB过滤器和监听器技术 复习: 1.大结果集分页mysql的实现,是使用那个关键字,从user表中取第一页的数据,长度为10,sql语句怎么写? 2.分页查询的起始位置(star ...
- 使用.NetCore在Linux上写TCP listen 重启后无法绑定地址
拥抱.net core的过程中, 将公司的一套java项目改成了.net core 2.0版的. 里面的tcp服务被我用msdn的SocketAsyncEventArgs方式重写了, 然而在测试的过程 ...
- JavaWEB过滤器和监听器技术
过滤器介绍 什么是过滤器 生活中的例子: 滤水器,口罩,杯子上滤网,渔网 生活中的过滤器:留下我们想要的,排除,我们不想要的. 高考: 只有分数够高的同学才能进入理想的大学.有一部分同学被拦截在大学之 ...
- Redis布隆过滤器与布谷鸟过滤器
大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景: 我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有 ...
- 加快ASP。NET Core WEB API应用程序。第3部分
下载source from GitHub 对ASP进行深度重构和优化.NET Core WEB API应用程序代码 介绍 第1部分.创建一个测试的RESTful WEB API应用程序. 第2部分.增 ...
- 2018-2019-2 《网络对抗技术》Exp6 信息搜集与漏洞扫描 20165326
信息搜集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 基础知识 间接:不接触目标,无直接连接访问,使用辅助模块进行收集分析 DNS:执行各种相关查询 搜索引擎 直接:建立逻辑连 ...
随机推荐
- YZMCMS V5.3后台 SSRF
当改变命运的时刻降临,犹豫就会败北. 前言 此前在测试过程中遇到过此CMS,久攻不下,于是便尝试代码审计,不得不说这套CMS还是挺安全的,读起来也简单,也适合初学代码审计的同学去阅读,不过漏洞真的不多 ...
- maven 报错 Failed to execute goal on project ...: Could not resolve dependencies for project ...
昨天在研究 项目 遇到这样一个问题 可以看到 上面有三个 模块 jeecg-boot-base-common .jeecg-boot-module-system .jeecg-boot-modules ...
- Redis 6.0 多线程性能测试结果及分析
单线程的Redis一向以简洁高效著称,但也有其阿喀琉斯之踵:阻塞!单个线程在最容易产生瓶颈的网络读写(Redis大key)请求完成之前,其他所有请求都将会被阻塞,严重影响其效率,因此Redis的多 ...
- 【基础】CentOS6如何将命令行模式下安装图形界面
系统版本:这里我使用的系统是CentOS6.9 安装方式:安装方式为yum源安装 1.配置yum源仓库 # 在配置之前最好把我们自己的yum仓库文件备份一下: cp /etc/yum.repos.d/ ...
- [PASECA2019]honey_shop writeup
这是PASECA2019的一道web题 前端是一个蜂蜜商店,你有$1336,可以买蜂蜜和flag.但是flag要$1337,所以我们只能买蜂蜜. 一般这种题目的常规操作就是通过修改你的钱使你能够买到f ...
- JPDA 远程调试方法记录
一.JPDA概念 JPDA(Java platform debugger architecture)是java平台调试架构的简称,由java虚拟机后端和调试平台前端组成. 1.java虚拟机提供了ja ...
- 嵌入式LInux-让开发板访问外网-ping bad address baidu.com
我的嵌入式设备已经接入网络.能够ping局域网ip.可是为了实现能够ping通外网.比如 ping baidu.com 还是不行的. 当运行ping baidu.com这个命令时,提示 ping ba ...
- 这篇文章告诉你MYSQLB+树具体索引数据组织明细内容
面试题:InnoDB中一棵B+树能存多少行数据? 一.InnoDB 一棵 B+ 树可以存放多少行数据? InnoDB 一棵 B+ 树可以存放多少行数据? 这个问题的简单回答是:约 2 千万. 为什 ...
- Linux操作系统的文件目录结构
一 --- 导读 首先记住一句经典的话:"linux世界中,万事万物皆为文件" 二---linux的目录结构示意图和windows下的目录结构示意图(本图需要背诵) 三---各目录 ...
- springboot项目Invalid bound statement (not found): com.xxxx.dao.xxxDAO.xxx解决方法
1.首先判断自己的Dao和mapper的对应关系,注意要一一对应的. 2.配置信息出现问题,注意配置信息填写: 3.记住要细心细心,细心,重要的事情说三遍.