.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);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM