NET 5 Api 统一数据格式

我们经常有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");
            }
        }



    }
原文地址:https://www.cnblogs.com/jasontarry/p/15485549.html