private static ArgumentBinding BindObject(ControllerContext cc, IInvokeableParameter parameter, string displayName) { var attributes = parameter.Attributes.ToArray(); displayName = displayName ?? parameter.Name.Sentencise(true); cc.HttpContext.Request.InputStream.Position = 0; //reset as Json binder will have already read it once var valueProvider = ValueProviderFactories.Factories.GetValueProvider(cc); var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, parameter.ValueType); metadata.DisplayName = displayName; ApplyAttributeMetaData(metadata, attributes); var bindingContext = new ModelBindingContext { ModelName = parameter.Name, ValueProvider = valueProvider, ModelMetadata = metadata, ModelState = cc.Controller.ViewData.ModelState }; var binder = ModelBinders.Binders.GetBinder(parameter.ValueType, true); var output = binder.BindModel(cc, bindingContext); var errors = new List<string>(); foreach (var va in attributes.OfType<ValidationAttribute>()) { var result = va.GetValidationResult(output, new ValidationContext(parameter.Parent, null, null) {MemberName = parameter.Name}); if (result != ValidationResult.Success) { var formatErrorMessage = va.FormatErrorMessage(parameter.DisplayName); errors.Add(formatErrorMessage); //bindingContext.ModelState.AddModelError(parameter.Name, formatErrorMessage); } } var argumentBinding = new ArgumentBinding() { Parameter = parameter, Value = output, Errors = errors }; return argumentBinding; }
public NotEnoughParametersForNodeMethodException(NodeMethod nodeMethod, IInvokeableParameter parameterInfo, object[] parameters) { NodeMethod = nodeMethod; ParameterInfo = parameterInfo; Parameters = parameters; }