private static BodyModelBinder GetBodyBinder( IInputFormatter inputFormatter, IBodyModelValidator validator, IOptions <MvcOptions> mvcOptions) { var actionContext = CreateActionContext(new DefaultHttpContext()); var inputFormatterSelector = new Mock <IInputFormatterSelector>(); inputFormatterSelector.Setup(o => o.SelectFormatter(It.IsAny <InputFormatterContext>())).Returns(inputFormatter); if (validator == null) { var mockValidator = new Mock <IBodyModelValidator>(); mockValidator.Setup(o => o.Validate(It.IsAny <ModelValidationContext>(), It.IsAny <string>())) .Returns(true) .Verifiable(); validator = mockValidator.Object; } if (mvcOptions == null) { var options = new Mock <MvcOptions>(); options.CallBase = true; var mockMvcOptions = new Mock <IOptions <MvcOptions> >(); mockMvcOptions.SetupGet(o => o.Options).Returns(options.Object); mvcOptions = mockMvcOptions.Object; } var binder = new BodyModelBinder(actionContext, inputFormatterSelector.Object, validator, mvcOptions); return(binder); }
/// <summary> /// Bind this parameter from the body using the supplied set of formatters. /// </summary> /// <param name="parameter">parameter to provide binding for.</param> /// <param name="formatters">formatters to choose from when binding the body</param> /// <returns>a binding</returns> public static HttpParameterBinding BindWithFormatter(this HttpParameterDescriptor parameter, IEnumerable <MediaTypeFormatter> formatters) { HttpConfiguration config = parameter.Configuration; IBodyModelValidator validators = config.Services.GetBodyModelValidator(); return(new FormatterParameterBinding(parameter, formatters, validators)); }
public ApiParameterBinding(HttpParameterDescriptor descriptor, bool willReadBody, IBodyModelValidator validator, bool isObject, bool fromBody) : base(descriptor) { _willReadBody = willReadBody; _validator = validator; _isObject = isObject; _fromBody = fromBody; }
/// <summary> /// Validates the given entity and adds the validation errors to the <see cref="ApiController.ModelState"/>, if any. /// </summary> /// <typeparam name="TEntity">The type of the entity to be validated.</typeparam> /// <param name="entity">The entity being validated.</param> /// <param name="keyPrefix"> /// The key prefix under which the model state errors would be added in the <see cref="ApiController.ModelState"/>. /// </param> public void Validate <TEntity>(TEntity entity, string keyPrefix) { if (Configuration == null) { throw Error.InvalidOperation( SRResources.TypePropertyMustNotBeNull, typeof(ApiController).Name, "Configuration" ); } IBodyModelValidator validator = Configuration.Services.GetBodyModelValidator(); if (validator != null) { ModelMetadataProvider metadataProvider = Configuration.Services.GetModelMetadataProvider(); Contract.Assert( metadataProvider != null, "GetModelMetadataProvider throws on null." ); validator.Validate( entity, typeof(TEntity), metadataProvider, ActionContext, keyPrefix ); } }
private static BodyModelBinder GetBodyBinder( IInputFormatter inputFormatter, IBodyModelValidator validator) { var actionContext = CreateActionContext(new DefaultHttpContext()); var inputFormatterSelector = new Mock <IInputFormatterSelector>(); inputFormatterSelector.Setup(o => o.SelectFormatter(It.IsAny <InputFormatterContext>())).Returns(inputFormatter); if (validator == null) { var mockValidator = new Mock <IBodyModelValidator>(); mockValidator.Setup(o => o.Validate(It.IsAny <ModelValidationContext>(), It.IsAny <string>())) .Returns(true) .Verifiable(); validator = mockValidator.Object; } var bodyValidationPredicatesProvidwer = new Mock <IValidationExcludeFiltersProvider>(); bodyValidationPredicatesProvidwer.SetupGet(o => o.ExcludeFilters) .Returns(new List <IExcludeTypeValidationFilter>()); var binder = new BodyModelBinder(actionContext, inputFormatterSelector.Object, validator, bodyValidationPredicatesProvidwer.Object); return(binder); }
public BodyAndUriParameterBinding(HttpParameterDescriptor descriptor) : base(descriptor) { _httpConfiguration = descriptor.Configuration; _formatters = _httpConfiguration.Formatters; _bodyModelValidator = _httpConfiguration.Services.GetBodyModelValidator(); }
public static bool IsValid <TEntity>(this ApiController controller, TEntity entity, string keyPrefix, out ModelStateDictionary modelState) { HttpConfiguration configuration = controller.Configuration; if (configuration == null) { throw new InvalidOperationException("Configuration cannot be null"); } IBodyModelValidator validator = configuration.Services.GetBodyModelValidator(); if (validator != null) { ModelMetadataProvider metadataProvider = configuration.Services.GetModelMetadataProvider(); HttpActionDescriptor actionDescriptor = controller.Request.GetActionDescriptor(); if (actionDescriptor == null) { throw new InvalidOperationException("Request must have an action descriptor."); } HttpActionContext actionContext = new HttpActionContext(controller.ControllerContext, actionDescriptor); if (!validator.Validate(entity, typeof(TEntity), metadataProvider, actionContext, keyPrefix)) { modelState = actionContext.ModelState; return(false); } } modelState = null; return(true); }
public BodyAndUriParameterBinding(HttpParameterDescriptor descriptor) : base(descriptor) { var httpConfiguration = descriptor.Configuration; Formatters = httpConfiguration.Formatters; BodyModelValidator = httpConfiguration.Services.GetBodyModelValidator(); }
public async Task ExecuteBindingAsync_PassesCancellationTokenTo_ReadContentAsync() { // Arrange var parameter = new Mock <HttpParameterDescriptor>(); parameter.Setup(p => p.IsOptional).Returns(false); parameter.Setup(p => p.ParameterName).Returns("ParameterName"); var formatters = Enumerable.Empty <MediaTypeFormatter>(); IBodyModelValidator validator = null; ModelMetadataProvider metadataProvider = new Mock <ModelMetadataProvider>().Object; HttpRequestMessage request = new HttpRequestMessage(); HttpActionContext actionContext = new HttpActionContext { ControllerContext = new HttpControllerContext { Request = request } }; CancellationTokenSource cts = new CancellationTokenSource(); Mock <FormatterParameterBinding> binding = new Mock <FormatterParameterBinding>(parameter.Object, formatters, validator); binding.CallBase = true; binding.Setup(b => b.ReadContentAsync(request, null, formatters, It.IsAny <IFormatterLogger>())) .Returns(Task.FromResult <object>(42)) .Verifiable(); // Act await binding.Object.ExecuteBindingAsync(metadataProvider, actionContext, cts.Token); // Assert binding.Verify(); }
public async Task ReadContentAsync_PassesCancellationToken_Further() { // Arrange var parameter = new Mock <HttpParameterDescriptor>(); parameter.Setup(p => p.IsOptional).Returns(false); IBodyModelValidator validator = null; HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(""); request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("app/test"); IFormatterLogger logger = null; CancellationTokenSource cts = new CancellationTokenSource(); Mock <MediaTypeFormatter> formatter = new Mock <MediaTypeFormatter>(); formatter.Setup(f => f.CanReadType(typeof(int))).Returns(true); formatter.Object.SupportedMediaTypes.Add(request.Content.Headers.ContentType); formatter.Setup(f => f.ReadFromStreamAsync(typeof(int), It.IsAny <Stream>(), request.Content, logger, cts.Token)) .Returns(Task.FromResult <object>(42)) .Verifiable(); var formatters = new[] { formatter.Object }; FormatterParameterBinding binding = new FormatterParameterBinding(parameter.Object, formatters, validator); // Act await binding.ReadContentAsync(request, typeof(int), formatters, logger, cts.Token); // Assert formatter.Verify(); }
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext) { ValueProviderResult valueProviderResult = GetCompatibleValueProviderResult( bindingContext ); if (valueProviderResult == null) { return(false); // conversion would have failed } bindingContext.ModelState.SetModelValue(bindingContext.ModelName, valueProviderResult); object model = valueProviderResult.RawValue; ModelBindingHelper.ReplaceEmptyStringWithNull(bindingContext.ModelMetadata, ref model); bindingContext.Model = model; if (bindingContext.ModelMetadata.IsComplexType) { HttpControllerContext controllerContext = actionContext.ControllerContext; if (controllerContext == null) { throw Error.Argument( "actionContext", SRResources.TypePropertyMustNotBeNull, typeof(HttpActionContext).Name, "ControllerContext" ); } HttpConfiguration configuration = controllerContext.Configuration; if (configuration == null) { throw Error.Argument( "actionContext", SRResources.TypePropertyMustNotBeNull, typeof(HttpControllerContext).Name, "Configuration" ); } ServicesContainer services = configuration.Services; Contract.Assert(services != null); IBodyModelValidator validator = services.GetBodyModelValidator(); ModelMetadataProvider metadataProvider = services.GetModelMetadataProvider(); if (validator != null && metadataProvider != null) { validator.Validate( model, bindingContext.ModelType, metadataProvider, actionContext, bindingContext.ModelName ); } } return(true); }
/// <summary> /// Bind this parameter from the body using the supplied set of formatters and validator. /// </summary> /// <param name="parameter">parameter to provide binding for.</param> /// <param name="formatters">formatters to choose from when binding the body</param> /// <param name="bodyModelValidator">a validator. Null to disable validation for this parameter.</param> /// <returns>a binding</returns> public static HttpParameterBinding BindWithFormatter( this HttpParameterDescriptor parameter, IEnumerable <MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator ) { return(new FormatterParameterBinding(parameter, formatters, bodyModelValidator)); }
public EasyPatchParameterBinding(HttpParameterDescriptor descriptor, Configuration config = null) : base(descriptor) { var httpConfiguration = descriptor.Configuration; BodyModelValidator = httpConfiguration.Services.GetBodyModelValidator(); Formatters = httpConfiguration.Formatters; configuration = config ?? new Configuration(); }
public TypePrefixBodyModelValidator(IBodyModelValidator innerValidator) { if (innerValidator == null) { throw new ArgumentNullException("innerValidator"); } this.innerValidator = innerValidator; }
public PrefixlessBodyModelValidator(IBodyModelValidator innerValidator) { if (innerValidator == null) { throw new ArgumentNullException("innerValidator"); } _innerValidator = innerValidator; }
public SkyBodyModelValidator(IBodyModelValidator innerValidator) { if (innerValidator == null) { throw new ArgumentNullException("innerValidator"); } _innerValidator = innerValidator; }
public BodyModelBinder([NotNull] IContextAccessor <ActionContext> context, [NotNull] IInputFormatterSelector selector, [NotNull] IBodyModelValidator bodyModelValidator, [NotNull] IValidationExcludeFiltersProvider bodyValidationExcludeFiltersProvider) { _actionContext = context.Value; _formatterSelector = selector; _bodyModelValidator = bodyModelValidator; _bodyValidationExcludeFiltersProvider = bodyValidationExcludeFiltersProvider; }
public FormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable <MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor) { if (descriptor.IsOptional) { _errorMessage = Error.Format(SRResources.OptionalBodyParameterNotSupported, descriptor.Prefix ?? descriptor.ParameterName, GetType().Name); } Formatters = formatters; BodyModelValidator = bodyModelValidator; }
public BodyModelBinder([NotNull] IContextAccessor <ActionContext> context, [NotNull] IInputFormatterSelector selector, [NotNull] IBodyModelValidator bodyModelValidator, [NotNull] IOptions <MvcOptions> mvcOptions) { _actionContext = context.Value; _formatterSelector = selector; _bodyModelValidator = bodyModelValidator; _mvcOptions = mvcOptions; }
public FormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable<MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor) { if (descriptor.IsOptional) { _errorMessage = Error.Format(SRResources.OptionalBodyParameterNotSupported, descriptor.Prefix ?? descriptor.ParameterName, GetType().Name); } Formatters = formatters; BodyModelValidator = bodyModelValidator; }
public BodyModelValidator(IBodyModelValidator originalValidator) { if (originalValidator != null) { _defaultValidator = originalValidator; } else { _defaultValidator = new DefaultBodyModelValidator(); } }
/// <summary> /// This attribute is used on action parameters to indicate /// they come only from the content body of the incoming <see cref="HttpRequestMessage"/>. /// </summary> public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter) { if (parameter == null) { throw new ArgumentNullException("parameter"); } IEnumerable <MediaTypeFormatter> formatters = parameter.Configuration.Formatters; IBodyModelValidator validator = parameter.Configuration.Services.GetBodyModelValidator(); return(parameter.BindWithFormatter(formatters, validator)); }
public BodyModelBinder([NotNull] IScopedInstance <ActionContext> context, [NotNull] IScopedInstance <ActionBindingContext> bindingContext, [NotNull] IInputFormatterSelector selector, [NotNull] IBodyModelValidator bodyModelValidator, [NotNull] IValidationExcludeFiltersProvider bodyValidationExcludeFiltersProvider) { _actionContext = context.Value; _bindingContext = bindingContext; _formatterSelector = selector; _bodyModelValidator = bodyModelValidator; _bodyValidationExcludeFiltersProvider = bodyValidationExcludeFiltersProvider; }
/// <summary> /// Bind this parameter from the body using the supplied set of formatters and validator. /// </summary> /// <param name="parameter">parameter to provide binding for.</param> /// <param name="formatters">formatters to choose from when binding the body</param> /// <param name="bodyModelValidator">a validator. Null to disable validation for this parameter.</param> /// <returns>a binding</returns> public static HttpParameterBinding BindWithFormatter(this HttpParameterDescriptor parameter, IEnumerable<MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) { return new FormatterParameterBinding(parameter, formatters, bodyModelValidator); }
public IdFromRouteFormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable <MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor, formatters, bodyModelValidator) { }
public FormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable<MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor) { Formatters = formatters; BodyModelValidator = bodyModelValidator; }
public FormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable <MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor) { Formatters = formatters; BodyModelValidator = bodyModelValidator; }
/// <summary> /// Initializes a new instance of the <see cref="PatchRequestParameterBinding"/> class. /// </summary> /// <param name="descriptor">The descriptor.</param> /// <param name="bodyModelValidator">The body model validator.</param> public PatchRequestParameterBinding(HttpParameterDescriptor descriptor, IBodyModelValidator bodyModelValidator) : base(descriptor) { _BodyModelValidator = bodyModelValidator; }
/// <summary> /// Gets the binding. /// </summary> /// <param name="parameter">The parameter.</param> /// <returns>System.Web.Http.Controllers.HttpParameterBinding.</returns> public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter) { IBodyModelValidator bodyModelValidator = parameter.Configuration.Services.GetBodyModelValidator(); return(new PatchRequestParameterBinding(parameter, bodyModelValidator)); }
public IdFromRouteFormatterParameterBinding(HttpParameterDescriptor descriptor, IEnumerable<MediaTypeFormatter> formatters, IBodyModelValidator bodyModelValidator) : base(descriptor, formatters, bodyModelValidator) { }
public CustomBodyModelValidator(IBodyModelValidator validator) { _validator = validator; }
public TypePrefixBodyModelValidator(IBodyModelValidator innerValidator) { this.innerValidator = innerValidator ?? throw new ArgumentNullException(nameof(innerValidator)); }