NetCore模型验证异常统一返回格式

NetCore中的模型验证返回的格式默认是系统自定义的,比如我们定义一个模型类:
 

public class Student{
    public int Id {get;set;}
    
    [MinLength(2,ErrorMessage ="姓名最小长度为2")]
    public string Name{get;set;}
}

当我们给某个控制器传入的参数是Student的Json数据且Name属性传入的值长度小于2时,NetCore会自动返回模型验证失败,且格式往往是这样的:

那么有没有办法统一定义整个api返回的数据格式呢,答案是有的,第一种方式是使用过滤器,IActionFilter动作过滤器可以 第二种方式是使用异常中间件,但是异常中间件是无法定义模型的返回格式的,因为这里的模型验证失败的错误是在Controller中间件中处理的,其他中间件无法得到,那么有没有方法只针对模型错误的返回格式进行定义呢,答案是有的,这里作者就找到了方式方法,代码如下:
 

builder.Services.AddControllers(options =>
{
    options.Filters.Add<HttpResponseExceptionFilter>();
}).ConfigureApiBehaviorOptions(options => {
    options.InvalidModelStateResponseFactory = context =>
    {
        var msg = "";
        foreach (var item in context.ModelState)
        {
            msg += item.Key;
            msg += ":" + item.Value.Errors[0].ErrorMessage;
            break;
        }
        var rst = new Result()
        {
            Code = "-99",
            Message = msg
        };

        return new BadRequestObjectResult(rst)
        {
            ContentTypes =
                {
                    // using static System.Net.Mime.MediaTypeNames;
                    Application.Json,
                    Application.Xml
                }
        };
    };
}).AddXmlSerializerFormatters();

这里Result即是我们自己定义的返回结构体,且支持以Json和Xml的格式返回响应,这取决于你的请求头是什么格式的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值