NetCore 关闭参数自动校验,返回自定义的格式

背景:

参数没有通过校验模型检查时,直接返回错误信息,但是这个错误信息可读性很弱,并不能被前端很方便的使用

{
  "type": "https://xxx",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "xxx",
  "errors": {
    "Data.xxx": [
      "The XXX field is required."
    ],
    "Data.xxx": [
      "The XXX field is required."
    ]
  }
}

Startup.ConfigureServices

            //  关闭参数自动校验,我们需要返回自定义的格式
            services.Configure<ApiBehaviorOptions>((o) =>
            {
                o.SuppressModelStateInvalidFilter = true;
            });

添加文件,封装错误信息

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System.Linq;

    /// <summary>
    /// 参数校验失败,返回自定义错误信息
    /// </summary>
    public class CustValidateModelAttribute : ActionFilterAttribute
    {
        /// <summary>
        /// 执行中
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var errorList = context.ModelState.Keys.SelectMany(key => context.ModelState[key].Errors.Select(x => x.ErrorMessage)).ToList();
                context.Result = new ObjectResult(ResponseBase.Get_BadRequest(errorList.Distinct().Join("\r\n")));
            }
        }
    }
}

 

 
posted @ 2023-01-13 17:22  Robot-Blog  阅读(39)  评论(0编辑  收藏  举报