我们经常有api 统一返回数据格式,又不想在每个控制器里写retun json 格式
这里是在action 方法处 aop的思想, 在action 上放置一个特性。
Filter 类 如下
public class FilterExtend : Attribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { var result = ((ObjectResult)context.Result).Value; context.Result = new JsonResult(new ResultRoot<object>() { Result = ResultType.Succeed, Data = result, Msg="ok" }); Console.WriteLine("OnActionExecuted"); } public void OnActionExecuting(ActionExecutingContext context) { Console.WriteLine("OnActionExecuting"); } }
action 的方法如下
[FilterExtend] [HttpGet] [Route("GetVs")] public IList<int> GetVs() { IList<int> vs = new List<int>(); vs.Add(1); vs.Add(2); return vs; }
实体类
public class ResultRoot<T> { public T Data { get; set; } public ResultType Result { get; set; } public string Msg { get; set; } } public enum ResultType { Succeed = 0, Faild = 1, NoAuth = 2, Other = 3 }
返回结果
netframework 版本 的filter 略有区别
public class AOPAuttibute : ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { base.OnActionExecuted(actionExecutedContext); var objectContent = actionExecutedContext.Response.Content as ObjectContent; if (objectContent != null && objectContent.Value != null) { Console.WriteLine( "aaa"); } } }