using DMS.Common.BaseResult;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; /// <summary>
/// 聚合扩展方法类
/// </summary>
public static class ModelStateExts
{
#region [ 得到模型错误消息 NonAction Task<string> ModelStateMsg(ModelStateDictionary modelState, List<string> PartValidKeys = null) ] /// <summary>
/// 得到模型错误消息
/// <code>
/// <![CDATA[
/// if (ModelState.IsValidOK(out string errmsg))
/// {
/// return await Service.GetLiveVodAndVideoProductList(CurrentUserTicket.ID.ToLong(), param);
/// }
/// else
/// {
/// return new ResponsePageResult<ProductVodOrVideoResult> { errno = 1, errmsg = errmsg };
/// }
/// ]]>
/// </code>
/// </summary>
/// <param name="modelState"></param>
/// <param name="errmsg">返回的错误消息</param>
/// <param name="PartValidKeys">要验证的属性集合</param>
/// <returns></returns>
public static bool IsValidOK(this ModelStateDictionary modelState, out string errmsg, List<string> PartValidKeys = null)
#region [ MyRegion ]
{
var errorCount = ; List<string> sb = new List<string>();
//获取所有错误的Key
List<string> keys = PartValidKeys ?? modelState.Keys.ToList(); //获取每一个key对应的ModelStateDictionary
foreach (var key in keys)
{
var errors = modelState[key].Errors.ToList();
errorCount += errors.Count; //将错误描述添加到sb中
foreach (var error in errors)
{
sb.Add(error.ErrorMessage);
}
} var result = string.Join(",", sb);
if (string.IsNullOrWhiteSpace(result))
{
result = $"{result}。";
} errmsg = result; return errorCount > ? false : true;
}
#endregion #endregion #region [ 进行模型验证,并返回服务结果 ] /// <summary>
/// 执行模型验证,并返回指定服务方法的执行结果
/// 调用方式:return await ModelState.GetResult(Service.ActionName, param);
/// </summary>
/// <typeparam name="TParam"></typeparam>
/// <typeparam name="TResult"></typeparam>
/// <param name="modelState"></param>
/// <param name="func"></param>
/// <param name="param"></param>
/// <param name="PartValidKeys"></param>
/// <returns></returns>
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()
#region [ MyRegion ]
{
if (IsValidOK(modelState, out string errmsg, PartValidKeys: PartValidKeys))
{
var result = new TResult { }; return await func.Invoke(param);
}
else
{
return new DataResultBase { errno = , errmsg = errmsg } as TResult;
}
}
#endregion #endregion
}

asp.net core ModelState 模型状态验证扩展类的更多相关文章

  1. asp.net core 3.x 身份验证-3cookie身份验证原理

    概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...

  2. ASP.NET CORE 管道模型及中间件使用解读

    说到ASP.NET CORE 管道模型不得不先来看看之前的ASP.NET 的管道模型,两者差异很大,.NET CORE 3.1 后完全重新设计了框架的底层,.net core 3.1 的管道模型更加灵 ...

  3. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  4. 避免在ASP.NET Core 3.0中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...

  5. ASP.NET Core MVC 模型绑定用法及原理

    前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...

  6. Asp.Net Core通过HttpStatusCode状态处理响应结果

    在我的一个Asp.Net Core 2.1 的项目中,我们需要通过获得服务器返回的状态,去实现不用的操作,经过多方资料查询和实践,个人总结一种方法 一.修改控制器 在要返回值的控制器Action中,R ...

  7. ASP.NET Core的无状态身份认证框架IdentityServer4

    Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Core和.NE ...

  8. asp.net core 3.x 身份验证-2启动阶段的配置

    注册服务.配置选项.添加身份验证方案 在Startup.ConfigureServices执行services.AddAuthentication() 注册如下服务(便于理解省略了部分辅助服务): s ...

  9. 你真的了解ASP.NET Core 部署模型吗?

    ----------------------------   以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论-------------------------- ...

随机推荐

  1. datalab (原发布 csdn 2018年09月21日 20:42:54)

    首先声明datalab本人未完成,有4道题目没有做出来.本文博客记录下自己的解析,以便以后回忆.如果能帮助到你就更好了,如果觉得本文没啥技术含量,也望多多包涵. /* * bitAnd - x& ...

  2. 关于 L3 缓存行 cacheLIne 的研究!还是对程序有举足轻重的作用!

    https://www.cnblogs.com/PurpleTide/archive/2010/11/25/1887506.html CLR via C# 读书笔记 2-3 Cache Lines a ...

  3. python numba讲解

    目录 一:什么是numba 二:如何使用numba   由于python有动态解释性语言的特性,跑起代码来相比java.c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种 ...

  4. web文件上传的总结(二)改变Apache默认post值来提高文件上传大小

    上传的文件大小大于2MB的解决方法 #默认apache 允许上大小2MB #技术经理-->修改apache默认配置  php.ini (授权) (1)复制 php.ini -> php1. ...

  5. RabbitMQ启动报unknown exchange type 'x-delayed-message'

    RabbitMQ延迟队列插件未安装,导致以下问题: ShutdownSignalException: connection error; protocol method: #method<con ...

  6. debian apt-get 代理

    一:在 /etc/apt/目录下建立 apt.conf 文件增加如下 Acquire::http::Proxy "http://proxyxxxxxxx:port"; 注意格式:最 ...

  7. 安装教程-VMware 12 安装 Windows 10 企业版

    VMware 12 安装 Windows 10 企业版 1.实验描述 在虚拟机中,手动安装 Windows10 企业版操作系统,为一些实验提供平台,因此,有关系统激活问题不再演示.可自行百度,或者加入 ...

  8. 201871010109-胡欢欢《面向对象程序设计(java)》第十周学习总结

    201871010109-胡欢欢<面向对象程序设计(java)>第十周学习总结 博文正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu- ...

  9. 201871010101-陈来弟《面向对象程序设计(java)》第十六周学习总结

    实验十四  应用程序归档与线程初步 实验时间 2019-12-12 第一部分:基础知识 1. 程序与进程: 进程是指一个具有一定独立功能的程序关于某个数据集合的一次运行活动.电脑中时会有很多单独运行的 ...

  10. pycharm写好的python项目怎么上传到github?

    话不多说,直接抛链接 Pycharm项目上传到Github