Example #1
0
        /// <summary>
        /// Execute after each action
        /// Convert return type to jsonAPI format
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            if (AttributeHandling.IsIgnoreJsonApi(((ControllerActionDescriptor)context.ActionDescriptor).MethodInfo, Constants.WAY_PARSER))
            {
                return;
            }

            JsonApiService service = context.HttpContext.RequestServices.GetRequiredService <JsonApiService>();

            if (service.Error != null && service.Error.HasErrors())
            {
                context.HttpContext.Response.StatusCode = Constants.ERROR_STATUT_JSONAPI;
                context.Result = new ObjectResult(service.Error.GetJsonErrors());

                return;
            }

            if (context.Result is ObjectResult)
            {
                object result = ((ObjectResult)context.Result).Value;

                //If result is already JObject, return it without transform
                if (result?.GetType() == typeof(Newtonsoft.Json.Linq.JObject))
                {
                    return;
                }

                //Transform result to JsonAPI format
                JsonApiParser jsonAPIParser = service.Parser;
                jsonAPIParser.SetResolver(new ResolverData(context.HttpContext.RequestServices, service.Resolvers));
                jsonAPIParser.SetModel(result);
                jsonAPIParser.SetOptionsWithQuery(context.HttpContext.Request.Query);

                ((ObjectResult)context.Result).Value = jsonAPIParser.GetJson();
            }

            base.OnActionExecuted(context);
        }