zoukankan      html  css  js  c++  java
  • 解决.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中了:

     

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

  • 相关阅读:
    解决 Windows 资源管理器 CPU 占用率很高的问题
    彻底卸载Cygwin
    Cygwin 快速镜像站点
    解决 cygwin 在 win10 下中文显示乱码的问题
    酷派大神 F1 连接调试,日志获取的方法
    陌路
    游戏开发中自定义脚本与配置
    在 cygwin 的环境下调用 libgdx gdx-tools
    在 cygwin 的环境下使用 git 的时候中文编码的问题
    对 android apk 进行重新签名操作
  • 原文地址:https://www.cnblogs.com/norain/p/10248848.html
Copyright © 2011-2022 走看看