Esempio n. 1
0
        public virtual ModelStateDictionary ValidateRequest()
        {
            var controllerContext = _actionExecutionContext.ControllerContext;
            var actionDescriptor  = _actionExecutionContext.ActionDescriptor;

            _parameters = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);
            var modelState = controllerContext.Controller.ViewData.ModelState;

            foreach (ParameterDescriptor parameterDescriptor in actionDescriptor.GetParameters())
            {
                var parameterName = parameterDescriptor.ParameterName;
                var parameterType = parameterDescriptor.ParameterType;
                var value         = GetParameterValue(controllerContext, parameterDescriptor);

                _parameters[parameterName] = value;

                if (value == null)
                {
                    continue;
                }

                var validationResults = _mvcApplication.ValidateModel(parameterType, value, controllerContext);

                Func <ModelValidationResult, bool> isValidField =
                    res => modelState.IsValidField(String.Format("{0}.{1}", parameterName, res.MemberName));

                foreach (var validationResult in validationResults.Where(isValidField).ToArray())
                {
                    var subPropertyName = String.Format("{0}.{1}", parameterName, validationResult.MemberName);
                    modelState.AddModelError(subPropertyName, validationResult.Message);
                }
            }
            return(modelState);
        }