public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!(context.Controller is IObjectController controller))
            {
                return;
            }

            var resourceType = context.ActionDescriptor is ControllerActionDescriptor descriptor
                ? descriptor.MethodInfo.GetCustomAttribute(typeof(ObjectTypeAttribute)) is ObjectTypeAttribute
                               objectTypeAttribute ? objectTypeAttribute.Type : controller.ObjectType
                : controller.ObjectType;

            var qc = new QueryContext
            {
                Type = resourceType
            };

            var qs = QueryHelpers.ParseQuery(context.HttpContext.Request.QueryString.Value);

            if (context.Result == null)
            {
                PageFilterAttribute.Execute(context, qs, qc);
            }

            if (context.Result == null)
            {
                SortFilterAttribute.Execute(context, qs, qc);
            }

            if (context.Result == null)
            {
                FieldsFilterAttribute.Execute(context, qs, qc);
            }

            if (context.Result == null)
            {
                FilterFilterAttribute.Execute(context, qs, qc);
            }

            if (context.Result == null)
            {
                ProjectionFilterAttribute.Execute(context, qs, qc);
            }
        }
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var qs = QueryHelpers.ParseQuery(context.HttpContext.Request.QueryString.Value);
            var qc = new QueryContext();

            if (context.ActionArguments.ContainsKey("page"))
            {
                PageFilterAttribute.Execute(context, qs, qc);
            }

            if (context.ActionArguments.ContainsKey("stream"))
            {
                StreamFilterAttribute.Execute(context, qs, qc);
            }

            if (context.ActionArguments.ContainsKey("sort"))
            {
                SortFilterAttribute.Execute(context, qs, qc);
            }

            if (context.ActionArguments.ContainsKey("fields"))
            {
                FieldsFilterAttribute.Execute(context, qs, qc);
            }

            if (context.ActionArguments.ContainsKey("filter"))
            {
                FilterFilterAttribute.Execute(context, qs, qc);
            }

            if (context.ActionArguments.ContainsKey("projection"))
            {
                ProjectionFilterAttribute.Execute(context, qs, qc);
            }

            if (qc.Errors?.Count > 0)
            {
                context.Result = new ErrorResult(new Error(ErrorEvents.ValidationFailed,
                                                           ErrorStrings.ValidationFailed, (HttpStatusCode)422, qc.Errors));
            }
        }