简言:
最近做项目用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中了:
----------------------------------------------------结束线------------------------------------------