public static object[] GetParameterValues(this ActionExecutingContext context)
        {
            var method          = context.GetMethodInfo();
            var parameters      = method.GetParameters();
            var parameterValues = new object[parameters.Length];

            for (var i = 0; i < parameters.Length; i++)
            {
                parameterValues[i] = context.ActionArguments.GetOrDefault(parameters[i].Name);
            }

            return(parameterValues);
        }
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (!context.ActionDescriptor.IsControllerAction())
            {
                await next();

                return;
            }

            var errors = validator.Value.Validate(context.GetMethodInfo(), context.GetParameterValues()) ?? new List <ValidationError>();

            AddModelStateErrors(context, errors);

            if (errors.Any())
            {
                throw new ValidationException(errors);
            }
            else
            {
                await next();
            }
        }