/// <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); }