public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsAllow() { // Act var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Allow, options: new MvcOptions()); // Assert Assert.True(allowEmpty); }
public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDefaultValue_DefaultsToFalseWhenOptionsIsUnavailable() { // Act var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Default, options: null); // Assert Assert.False(allowEmpty); }
public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDefaultValue_UsesMvcOptions() { // Arrange var options = new MvcOptions { AllowEmptyInputInBodyModelBinding = true }; // Act var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Default, options); // Assert Assert.True(allowEmpty); }
public void CalculateAllowEmptyBody_EmptyBodyBehaviorIsDisallowed() { // Arrange // MvcOptions.AllowEmptyInputInBodyModelBinding should be ignored if EmptyBodyBehavior disallows it var options = new MvcOptions { AllowEmptyInputInBodyModelBinding = true }; // Act var allowEmpty = BodyModelBinderProvider.CalculateAllowEmptyBody(EmptyBodyBehavior.Disallow, options); // Assert Assert.False(allowEmpty); }
public void GetBinder_DoesNotThrowNullReferenceException() { // Arrange var context = new TestModelBinderProviderContext(typeof(Person)); context.BindingInfo.BindingSource = BindingSource.Body; var formatter = new TestInputFormatter(); var formatterList = new List <IInputFormatter> { formatter }; var provider = new BodyModelBinderProvider(formatterList, new TestHttpRequestStreamReaderFactory()); // Act & Assert (does not throw) provider.GetBinder(context); }
public BodyAndRouteModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexObjectModelBinderProvider complexTypeModelBinderProvider) { _bodyModelBinderProvider = bodyModelBinderProvider ?? throw new ArgumentNullException(nameof(bodyModelBinderProvider)); _complexTypeModelBinderProvider = complexTypeModelBinderProvider ?? throw new ArgumentNullException(nameof(complexTypeModelBinderProvider)); }
public async Task MultipleActionParameter_ValidModelState(List <ParameterDescriptor> parameters) { // Since validation attribute is only present on the FromBody model's property(TransferInfo's AccountId), // validation should not trigger for the parameter which is bound from Uri. // Arrange var actionDescriptor = new ControllerActionDescriptor() { BoundProperties = new List <ParameterDescriptor>(), Parameters = parameters }; var modelMetadataProvider = new EmptyModelMetadataProvider(); var modelBinderProvider = new BodyModelBinderProvider(new[] { Mock.Of <IInputFormatter>() }, Mock.Of <IHttpRequestStreamReaderFactory>()); var factory = TestModelBinderFactory.CreateDefault(modelBinderProvider); var parameterBinder = new Mock <ParameterBinder>( new EmptyModelMetadataProvider(), factory, CreateMockValidator()); parameterBinder.Setup(p => p.BindModelAsync( It.IsAny <ActionContext>(), It.IsAny <IModelBinder>(), It.IsAny <IValueProvider>(), It.IsAny <ParameterDescriptor>(), It.IsAny <ModelMetadata>(), null)) .Returns((ActionContext context, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor descriptor, ModelMetadata metadata, object v) => { ModelBindingResult result; if (descriptor.Name == "accountId") { result = ModelBindingResult.Success(10); } else if (descriptor.Name == "transferInfo") { result = ModelBindingResult.Success(new TransferInfo { AccountId = 40, Amount = 250.0 }); } else { result = ModelBindingResult.Failed(); } return(Task.FromResult(result)); }); var controllerContext = new ControllerContext { ActionDescriptor = actionDescriptor, }; var arguments = new Dictionary <string, object>(StringComparer.Ordinal); var modelState = controllerContext.ModelState; // Act var binderDelegate = ControllerBinderDelegateProvider.CreateBinderDelegate( parameterBinder.Object, factory, TestModelMetadataProvider.CreateDefaultProvider(), actionDescriptor); await binderDelegate(controllerContext, new TestController(), arguments); // Assert Assert.True(modelState.IsValid); Assert.True(arguments.TryGetValue("accountId", out var value)); var accountId = Assert.IsType <int>(value); Assert.Equal(10, accountId); Assert.True(arguments.TryGetValue("transferInfo", out value)); var transferInfo = Assert.IsType <TransferInfo>(value); Assert.NotNull(transferInfo); Assert.Equal(40, transferInfo.AccountId); Assert.Equal(250.0, transferInfo.Amount); }
public BodyOrDefaultModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexTypeModelBinderProvider complexTypeModelBinderProvider) { _bodyModelBinderProvider = bodyModelBinderProvider; _complexTypeModelBinderProvider = complexTypeModelBinderProvider; }
/// <summary> /// Initializes a new instance of the <see cref="BodyAndRouteModelBinderProvider"/> class. /// </summary> /// <param name="bodyModelBinderProvider">The body model binder provider.</param> /// <param name="complexTypeModelBinderProvider">The complex type model binder provider.</param> public BodyAndRouteModelBinderProvider(BodyModelBinderProvider bodyModelBinderProvider, ComplexTypeModelBinderProvider complexTypeModelBinderProvider) { _bodyModelBinderProvider = bodyModelBinderProvider; _complexTypeModelBinderProvider = complexTypeModelBinderProvider; }
public NtBodyModelBinderProvider(IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory) { this.formatters = formatters; this.readerFactory = readerFactory; defaultProvider = new BodyModelBinderProvider(formatters, readerFactory); }