.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
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章