解决.net Core中WebApi自动Model验证导致数据格式不能统一


简言:

  最近做项目用WebAPI Core时,想把返回数据的格式,统一弄成:{“errorMsg”:"xxx","Data":"xxxx"}这种。谁知道,WebAPI的model会自动验证,于是乎格式成了:

   我想能不能自己像在MVC里面那样自己控制model验证:ModelState.IsValid。找了很多资料,都没有关于.net core web api的解决方法。没办法,只能自己动手咯!嘻嘻,请看:

我这里是利用IResultFilter来实现的

    1、 首先第一步:建一个统一数据格式的类,我这里还是用http状态码来判断请求是否成功:

public class APIResult
{
public string ErrorMsg { get; set; }
public object Data { get; set; }
}

    2、然后再建一个继承自IResultFilter的类:

复制代码
    public class APIResultFilter : IResultFilter
    {
        public void OnResultExecuted(ResultExecutedContext context)
        {
        }
        public void OnResultExecuting(ResultExecutingContext context)
        {
            if (context.Result is BadRequestObjectResult)
            {
                BadRequestObjectResult res = (BadRequestObjectResult)context.Result;
                SerializableError obj = res.Value as SerializableError;
                StringBuilder sb = new StringBuilder();
                foreach (var item in obj)
                {
                    var vals = item.Value as string[];
                    if (vals != null)
                    {
                        sb.AppendLine(vals[0]);
                    }
                }
                context.Result = new JsonResult(new APIResult { ErrorMsg = sb.ToString() }) { StatusCode=400};
                return;
            }
        }
    }
复制代码

    因为webapi core好像会自动验证Model,返回的类型是:BadRequestObjectResult。我是通过反射GetType()查看的。

    3、最后一步就是将Filter添加到WebApi中了:

 

 

 

----------------------------------------------------结束线------------------------------------------


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM