ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

asp.net core 模型验证扩展类

2019-12-05 13:52:37  阅读:295  来源: 互联网

标签:modelState core asp PartValidKeys TResult result var net errmsg


 

    /// <summary>
    /// 聚合扩展方法类
    /// </summary>
    public static class Exts
    {
        #region [ 得到模型错误消息 NonAction Task<string> ModelStateMsg(ModelStateDictionary modelState) ]
        /// <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)
        {
            var errorCount = 0;

            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 > 0 ? false : true;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="modelState"></param>
        /// <param name="action"></param>
        /// <param name="PartValidKeys"></param>
        /// <returns></returns>
        public static TResult GetResult<TResult>(this ModelStateDictionary modelState, Action<TResult> action, List<string> PartValidKeys = null)
            where TResult : class, new()
        {
            if (IsValidOK(modelState, out string errmsg, PartValidKeys: PartValidKeys))
            {
                var result = new TResult { };
                action(result);
                return result;
            }
            else
            {

                return new DataResultBase { errno = 600, errmsg = errmsg } as TResult;
            }
        }

        /// <summary>
        /// 
        /// </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> GetResult<TParam,TResult>(this ModelStateDictionary modelState, Func<TParam,Task<TResult>> func,TParam param, List<string> PartValidKeys = null)
            where TResult : class, new()
        {
            if (IsValidOK(modelState, out string errmsg, PartValidKeys: PartValidKeys))
            {
                var result = new TResult { };
                
                return await func.Invoke(param);
            }
            else
            {

                return new DataResultBase { errno = 600, errmsg = errmsg } as TResult;
            }
        }
        #endregion

 

标签:modelState,core,asp,PartValidKeys,TResult,result,var,net,errmsg
来源: https://www.cnblogs.com/webenh/p/11988778.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有