最近学习 .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; }
}

最新文章

  1. Zabbix监控redis status
  2. Oracle索引碎片检查及定期重建常用表的索引
  3. Redis Cluster架构和设计机制简单介绍
  4. Android Studio 将工程作为第三方类库的步骤
  5. [转]Java汉字按照拼音排序
  6. VFL(Visual Format Language)语言
  7. 【lucene系列学习二】Lucene实现高亮显示关键词
  8. Hyperledger Fabric 1.0 从零开始(四)——Fabric源码及镜像文件处理
  9. MacOS 下安装mysqlclient 的问题及解决办法
  10. Django 基础二(View和urls)
  11. Add AI feature to Xamarin.Forms app
  12. JSON &amp; XML
  13. Java类加载双亲委托模式优点
  14. 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
  15. PyQt5--QColorDiaglog
  16. 推荐一个不错的关于Excel数据统计分析的公众号
  17. 在eclipse中修改生成的注释类、方法的作者、时间
  18. Ctrl+Z 暂停程序及重启程序【转】
  19. BigDecimal常用操作
  20. MonoDevelop 的一些设置

热门文章

  1. RabbitMQException com.rabbitmq.client.ShutdownSignalException: connection error; protocol meth
  2. javascript笔记day01
  3. Java与C#
  4. 在 easyui中获取form表单中所有提交的数据 拼接到table列表中
  5. WIN10系统下静态编译Qt4.8.7
  6. springboot文件上传问题记录
  7. JDBC数据连接之增删改查MVC
  8. 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
  9. JVM笔记——类加载
  10. body-parser 源码分析