asp.net core ModelState 模型状态验证扩展类
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 模型状态验证扩展类的更多相关文章
- asp.net core 3.x 身份验证-3cookie身份验证原理
概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...
- ASP.NET CORE 管道模型及中间件使用解读
说到ASP.NET CORE 管道模型不得不先来看看之前的ASP.NET 的管道模型,两者差异很大,.NET CORE 3.1 后完全重新设计了框架的底层,.net core 3.1 的管道模型更加灵 ...
- 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权
OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...
- 避免在ASP.NET Core 3.0中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- Asp.Net Core通过HttpStatusCode状态处理响应结果
在我的一个Asp.Net Core 2.1 的项目中,我们需要通过获得服务器返回的状态,去实现不用的操作,经过多方资料查询和实践,个人总结一种方法 一.修改控制器 在要返回值的控制器Action中,R ...
- ASP.NET Core的无状态身份认证框架IdentityServer4
Identity Server 4是IdentityServer的最新版本,它是流行的OpenID Connect和OAuth Framework for .NET,为ASP.NET Core和.NE ...
- asp.net core 3.x 身份验证-2启动阶段的配置
注册服务.配置选项.添加身份验证方案 在Startup.ConfigureServices执行services.AddAuthentication() 注册如下服务(便于理解省略了部分辅助服务): s ...
- 你真的了解ASP.NET Core 部署模型吗?
---------------------------- 以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论-------------------------- ...
随机推荐
- WPF数据模板(7)
数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...
- Java面向对象——类的成员
Java面向对象——类的成员 摘要:本文主要介绍了类的常见成员. 属性 属性称为成员变量,一般来讲不用赋值,因为有默认值,另外显式赋值没有意义会导致所有由此类创建对象都是此值. 默认值 Boolean ...
- Java学习——包装类
Java学习——包装类 摘要:本文主要介绍了Java中常用的包装类和基本类型之间的转换,包装类或基本类型和String之间的转换. 部分内容来自以下博客: https://www.cnblogs.co ...
- Java生鲜电商平台-供应链模块的设计与架构
Java生鲜电商平台-供应链模块的设计与架构 说明:Java开源生鲜电商平台中供应链模块属于卖家的行为,也就是卖家如何管理他们自己的供应商,包括结算方式,压款方式,结算周期等等,超出了我这个B2B平台 ...
- 转 echarts 的使用时遇到的坑 初始化和销毁,亲测有效!
纵观ECharts图表实例化的API,主要有一下几个相关的实例化方法: 1.setOption(Object option,{boolean = true} notMerge) 参数: 1).Obje ...
- maven 学习---使用“mvn site-deploy”部署站点
这里有一个指南,向您展示如何使用“mvn site:deploy”来自动部署生成的文档站点到服务器,这里通过WebDAV机制说明. P.S 在这篇文章中,我们使用的是Apache服务器2.x的WebD ...
- maven 学习---Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- pm2入门
简介 PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控.自动重启.负载均衡等,而且使用非常简单. 安装 全局安装,简直不能更简单. npm install -g ...
- 关与 @EnableConfigurationProperties 注解
@EnableConfigurationProperties注解的作用是: 让使用 @ConfigurationProperties 注解的类生效. 当@EnableConfigurationProp ...
- 解决IDEA springBoot读取*.properties文件中文内容乱码的问题
1. 配置 properties 文件 2. 读取 sex 属性输出到页面, 中文乱码 3. file --> settings 4. Editor --> File Encodings ...