思路:使用自定義特性方法,繼承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); }