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. ASP.NET Core快速入门(第6章:ASP.NET Core MVC)--学习笔记

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务40:介绍 1.Individual authentication 模板 ...

  2. 基于cephfs搭建高可用分布式存储并mount到本地

    原文:https://www.fullstackmemo.com/2018/10/11/cephfs-ha-mount-storage/ 服务器硬件配置及环境 项目 说明 CPU 1核 内存 1GB ...

  3. word转txt

    import org.apache.poi.hwpf.extractor.WordExtractor; import java.io.IOException; import java.io.Input ...

  4. vue如何导入外部js文件(es6)

    也许大家都是使用习惯了es5的写法喜欢直接用<Script>标签倒入js文件,但是很是可惜,这写法.在es6,或则说vue环境下不支持 真的写法是怎样? 首先.我们要改造我们要映入的外部j ...

  5. css中的行内元素和块级元素总结

    块级元素 <address>,  <button>,  <caption>,  <dd>,  <del>,  <div>,  & ...

  6. Kail Linux xface 2019.2

    概述: -OS: Kali-Rolling (2019.2) -DE: XFCE -WM: Arc-Dark -WM Theme: Arc-Dark -Icons: Korla -Term Font: ...

  7. 智能社javascript

    http://www.chuanke.com/?mod=student&act=study&courseid=91706

  8. 7 CentOS 7网卡配置

    首先重中之重:修改前一定要进行系统备份,如果是虚拟机进行快照 查看虚拟机的网卡配置 注意桥接模式和NAT模式     桥接模式:网络层面,虚拟机和PC处于同级地位,虚拟机直接和路由器相连     NA ...

  9. flink Periodic Watermarks 自定义周期性水印

    1.BoundedOutOfOrdernessGenerator /** * This generator generates watermarks assuming that elements ar ...

  10. Django 简单评论实现

    创建项目 django_comment 和应用 app01 修改 urls.py 文件 from django.contrib import admin from django.urls import ...