簡言:
最近做項目用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中了:

----------------------------------------------------結束線------------------------------------------

