WebEnh

.net7 mvc jquery bootstrap json 学习中 第一次学PHP,正在研究中。自学进行时... ... 我的博客 https://enhweb.github.io/ 不错的皮肤:darkgreentrip,iMetro_HD
随笔 - 1079, 文章 - 1, 评论 - 75, 阅读 - 174万
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

asp.net core ModelState 模型状态验证扩展类

Posted on   WebEnh  阅读(838)  评论(0编辑  收藏  举报

 

复制代码
  1 using DMS.Common.BaseResult;
  2 using Microsoft.AspNetCore.Mvc.ModelBinding;
  3 using System;
  4 using System.Collections.Generic;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Threading.Tasks;
  8 
  9 /// <summary>
 10 /// 聚合扩展方法类
 11 /// </summary>
 12 public static class ModelStateExts
 13 {
 14     #region [ 得到模型错误消息 NonAction Task<string> ModelStateMsg(ModelStateDictionary modelState, List<string> PartValidKeys = null) ]
 15 
 16     /// <summary>
 17     /// 得到模型错误消息
 18     /// <code>
 19     /// <![CDATA[
 20     ///     if (ModelState.IsValidOK(out string errmsg))
 21     ///     {
 22     ///         return await Service.GetLiveVodAndVideoProductList(CurrentUserTicket.ID.ToLong(), param);
 23     ///     }
 24     ///     else
 25     ///     {
 26     ///         return new ResponsePageResult<ProductVodOrVideoResult> { errno = 1, errmsg = errmsg };
 27     ///     }
 28     /// ]]>
 29     /// </code>
 30     /// </summary>
 31     /// <param name="modelState"></param>
 32     /// <param name="errmsg">返回的错误消息</param>
 33     /// <param name="PartValidKeys">要验证的属性集合</param>
 34     /// <returns></returns>
 35     public static bool IsValidOK(this ModelStateDictionary modelState, out string errmsg, List<string> PartValidKeys = null)
 36     #region [ MyRegion ]
 37     {
 38         var errorCount = 0;
 39 
 40         List<string> sb = new List<string>();
 41         //获取所有错误的Key
 42         List<string> keys = PartValidKeys ?? modelState.Keys.ToList();
 43 
 44         //获取每一个key对应的ModelStateDictionary
 45         foreach (var key in keys)
 46         {
 47             var errors = modelState[key].Errors.ToList();
 48             errorCount += errors.Count;
 49 
 50             //将错误描述添加到sb中
 51             foreach (var error in errors)
 52             {
 53                 sb.Add(error.ErrorMessage);
 54             }
 55         }
 56 
 57         var result = string.Join("", sb);
 58         if (string.IsNullOrWhiteSpace(result))
 59         {
 60             result = $"{result}。";
 61         }
 62 
 63         errmsg = result;
 64 
 65         return errorCount > 0 ? false : true;
 66     }
 67     #endregion
 68 
 69     #endregion
 70 
 71     #region [ 进行模型验证,并返回服务结果 ]
 72 
 73     /// <summary>
 74     /// 执行模型验证,并返回指定服务方法的执行结果
 75     /// 调用方式:return await ModelState.GetResult(Service.ActionName, param);
 76     /// </summary>
 77     /// <typeparam name="TParam"></typeparam>
 78     /// <typeparam name="TResult"></typeparam>
 79     /// <param name="modelState"></param>
 80     /// <param name="func"></param>
 81     /// <param name="param"></param>
 82     /// <param name="PartValidKeys"></param>
 83     /// <returns></returns>
 84     public async static Task<TResult> Execute<TParam, TResult>(this ModelStateDictionary modelState, Func<TParam, Task<TResult>> func, TParam param, List<string> PartValidKeys = null) where TResult : class, new()
 85         #region [ MyRegion ]
 86     {
 87         if (IsValidOK(modelState, out string errmsg, PartValidKeys: PartValidKeys))
 88         {
 89             var result = new TResult { };
 90 
 91             return await func.Invoke(param);
 92         }
 93         else
 94         {
 95             return new DataResultBase { errno = 600, errmsg = errmsg } as TResult;
 96         }
 97     }
 98     #endregion
 99 
100     #endregion
101 }
复制代码

 

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2017-12-05 .Net IOC框架入门之一 Unity
2017-12-05 .Net IOC框架入门之二 CastleWindsor
2017-12-05 ABP Zero示例项目问题总结
2017-12-05 ABP Zero 本地化语言的初始化和扩展
2017-12-05 ABP Zero 导航菜单之角色权限
2017-12-05 ABP架构学习系列三:手工搭建ABP框架
2017-12-05 ABP架构学习系列二:ABP中配置的注册和初始化
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

了解更多