public Tuple<string[], string[]> Get() { HttpActionContext actionContext = new HttpActionContext { ControllerContext = this.ControllerContext }; ModelMetadataProvider metadataProvider = this.Configuration.Services.GetModelMetadataProvider(); ModelMetadata metadata = metadataProvider.GetMetadataForType(null, typeof(DemoModel)); IValueProvider valueProvider = new CompositeValueProviderFactory(this.Configuration.Services.GetValueProviderFactories()).GetValueProvider(actionContext); ModelBindingContext bindingContext = new ModelBindingContext { ModelMetadata = metadata, ValueProvider = valueProvider, ModelState = actionContext.ModelState }; actionContext.Bind(bindingContext); //验证之前的错误消息 string[] errorMessages1 = actionContext.ModelState.SelectMany( item => item.Value.Errors.Select( error => error.ErrorMessage)).ToArray(); //验证之前的错误消息 bindingContext.ValidationNode.Validate(actionContext); string[] errorMessages2 = actionContext.ModelState.SelectMany( item => item.Value.Errors.Select( error => error.ErrorMessage)).ToArray(); return new Tuple<string[], string[]>(errorMessages1, errorMessages2); }
public override System.Threading.Tasks.Task ExecuteBindingAsync(System.Web.Http.Metadata.ModelMetadataProvider metadataProvider, HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken) { CompositeValueProviderFactory valueproviderFactory = new CompositeValueProviderFactory(this.ValueProviderFactories); string parameterName = base.Descriptor.ParameterName; Type parameterType = base.Descriptor.ParameterType; string prefix = base.Descriptor.Prefix; ModelBindingContext context = new ModelBindingContext() { ModelName = prefix ?? parameterName, FallbackToEmptyPrefix = prefix == null, ModelMetadata = metadataProvider.GetMetadataForType(null, parameterType), ModelState = actionContext.ModelState, ValueProvider = valueproviderFactory.GetValueProvider(actionContext) }; object argument=""; // this.Binder.BindModel() ? context.Model : base.Descriptor.DefaultValue ; base.SetValue(actionContext, argument); TaskCompletionSource<AsyncVoid> Source = new TaskCompletionSource<AsyncVoid>(); Source.SetResult(new AsyncVoid()); return Source.Task; }