zoukankan      html  css  js  c++  java
  • .net core入参验证 ---ValidationAttribute

    思路:使用自定义特性方法,继承ValidationAttribute,为入参Model添加特性

    using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
    using Microsoft.CodeAnalysis;
    using Nebula.Sites.AuditLog.Controllers;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    namespace Nebula.Sites.AuditLog.Dto
    {
      [AuditLogValidation]
      public class AuditLogDto
      {/// <summary>
        /// 原数据记录ID
        /// </summary>
        public string RecordID { get; set; }/// <summary>
        /// 操作类型:Insert,Delete,Update
        /// </summary>
        public string OperateType { get; set; }
    
        /// <summary>
        /// 操作人
        /// </summary>
        public string Operater { get; set; }    
      }
    
      /// <summary>
      /// 参数验证
      /// </summary>
      public class AuditLogValidationAttribute : ValidationAttribute
      {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
          var LogRequest = (AuditLogDto)value;string OperateType = LogRequest.OperateType.ToUpper();
          if (OperateType != "INSERT" && OperateType != "DELETE" && OperateType != "UPDATE")
          {
            throw new Exception( "OperateType Parameter error" );
          }return new ValidationResult( "Verified" );
        }
      }
    }

    由此,调用端无需做任何操作(且支持List<Model>)

            /// <summary>
            /// 批量操作
            /// </summary>
            /// <param name="LogRequest"></param>
            [HttpPost]
            public void WriteLogs([FromBody] List<AuditLogDto> LogRequest)
            {
                //多组数据,必须全部验证通过才入库
                foreach (var log in LogRequest)
                {
                    GetLogDB(log);
                }
            }
    
            /// <summary>
            /// 单条操作
            /// </summary>
            /// <param name="LogRequest"></param>
            [HttpPost]
            public void WriteLog([FromBody] AuditLogDto LogRequest)
            {
                //入库
                GetLogDB(LogRequest);
            }
  • 相关阅读:
    map()和filter()函数讲解与示例
    通过假设巧妙的判断出参数的最大值和最小值
    通过函数定义数据结构list中的每个元素是一个元组,扑克牌示例
    FileCloud 的原理简述&自己搭建文件云
    opengl学习笔记
    Pascal的sin^-1函数实现
    OpenGL键盘交互响应事件
    OpenGL 鼠标交互响应事件
    重踏比尔盖茨走过的路——模拟操作系统
    Pascal代码自动格式化
  • 原文地址:https://www.cnblogs.com/yxcn/p/13415820.html
Copyright © 2011-2022 走看看