/// <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