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
}
}
.Net Core API模型驗證自定義返回格式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.