.Net Core API模型验证自定义返回格式

using _SCscHero.Base;
using _SCscHero.Base.Enum;
using _SCscHero.Base.Help;
using _SCscHero.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _SCscHero.Base.Extensions
{
    /// <summary>
    /// 验证Model扩展
    /// </summary>
    public static class InvalidModelStateExtensions
    {
        private static InvalidModelReturnMessageTypeEnum InvalidModelReturnMessageTypeEnumValue = (InvalidModelReturnMessageTypeEnum)Enum.Parse(typeof(InvalidModelReturnMessageTypeEnum), AppSettingHelper.GetConfig("Extensions:InvalidModelReturnMessageType"));

        #region Model验证
        /// <summary>
        /// Model验证
        /// </summary>
        /// <param name="services"></param>
        public static void InvalidModelState(this IServiceCollection services)
        {
            //模型绑定特性验证,自定义返回格式
            services.Configure<ApiBehaviorOptions>(options =>
            {
                options.InvalidModelStateResponseFactory = actionContext =>
                {
                    //获取验证失败的模型字段 
                    var errorList = actionContext.ModelState
                    .Select(e => e.Value.Errors?.FirstOrDefault()?.ErrorMessage)
                    .ToList();
                    //设置返回内容
                    var result = new ResultModel();
                    result.Code = UnifyAPI.CodeConstant.FAIL;
                    result.Message = FormatMessage(errorList);
                    var objectResult = new BadRequestObjectResult(result);
                    objectResult.StatusCode = (int?)StatusCodes.Status200OK;
                    return objectResult;
                };
            });
        }

        #endregion

        #region 格式化消息
        /// <summary>
        /// 格式化消息
        /// </summary>
        /// <returns></returns>
        private static string FormatMessage(List<string> messageList)
        {
            StringBuilder message = new StringBuilder();

            switch (InvalidModelReturnMessageTypeEnumValue)
            {
                case InvalidModelReturnMessageTypeEnum.Single:
                    {
                        message.Append(messageList.First());
                    }
                    break;
                default:
                    {
                        message.Append(string.Join("|", messageList));
                    }
                    break;
            }
            return message.ToString();
        }
        #endregion
    }
}

猜你喜欢

转载自blog.csdn.net/qq_33391499/article/details/105354896
今日推荐