解決.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