public void Create_WhenBinderTypeIsNull_ReturnsNull() { // Arrange var provider = new BinderTypeModelBinderProvider(); var context = new TestModelBinderProviderContext(typeof(Person)); // Act var result = provider.GetBinder(context); // Assert Assert.Null(result); }
public void Create_WhenBinderTypeIsSet_ReturnsBinder() { // Arrange var provider = new BinderTypeModelBinderProvider(); var context = new TestModelBinderProviderContext(typeof(Person)); context.BindingInfo.BinderType = typeof(NullModelBinder); // Act var result = provider.GetBinder(context); // Assert Assert.IsType <BinderTypeModelBinder>(result); }
public async void BindTheXmlBodyToTheParameterValue(XmlSerializerType xmlSerializerType, bool useXmlBinderOnly) { // Arrange byte[] bodyRequestContext = new byte[0]; var value = new PurchaseOrder(); var xmlWriterSettings = FormattingUtilities.GetDefaultXmlWriterSettings(); xmlWriterSettings.CloseOutput = false; var textw = new StringWriter(); var writer = XmlWriter.Create(textw, xmlWriterSettings); if (xmlSerializerType == XmlSerializerType.XmlSeriralizer) { var xmlSerializer = new XmlSerializer(value.GetType()); xmlSerializer.Serialize(writer, value); bodyRequestContext = Encoding.UTF8.GetBytes(textw.ToString()); } else { var xmlSerializer = new DataContractSerializer(value.GetType()); xmlSerializer.WriteObject(writer, value); writer.Flush(); bodyRequestContext = Encoding.UTF8.GetBytes(textw.ToString()); } var att = new FromXmlBodyAttribute() { XmlSerializerType = xmlSerializerType, UseXmlBinderOnly = useXmlBinderOnly }; var attList = new List <object>() { att }; var bindingInfo = BindingInfo.GetBindingInfo(attList); var parameterDescriptor = new ParameterDescriptor { Name = "value", ParameterType = typeof(PurchaseOrder), BindingInfo = bindingInfo }; var actionDescriptor = new ActionDescriptor() { Parameters = new List <ParameterDescriptor>() { parameterDescriptor } }; var actionContext = GetActionContext(actionDescriptor); actionContext.HttpContext.Request.Body.Write(bodyRequestContext, 0, bodyRequestContext.Length); actionContext.HttpContext.Request.Body.Seek(0, SeekOrigin.Begin); ServiceCollection services = CreateServices(); var servicesProvider = services.BuildServiceProvider(); actionContext.HttpContext.RequestServices = servicesProvider; var metadataProvider = new TestModelMetadataProvider(); metadataProvider.ForType(parameterDescriptor.ParameterType).BindingDetails ( (b) => { b.BindingSource = BindingSource.Body; b.BinderType = att.BinderType; } ); ModelMetadata parameterModelMetadata = metadataProvider.GetMetadataForType(parameterDescriptor.ParameterType); var original = CreateDefaultValueProvider(); //*1 ModelBindingContext modelBindingContext = DefaultModelBindingContext.CreateBindingContext( actionContext, original, parameterModelMetadata, parameterDescriptor.BindingInfo, "model"); //*2 ModelBinderProviderContext modelBinderProviderContext = new TestModelBinderProviderContext(parameterModelMetadata, parameterDescriptor.BindingInfo, metadataProvider); BinderTypeModelBinderProvider binderTypeModelBinderProvider = new BinderTypeModelBinderProvider(); // Act var binderforType = binderTypeModelBinderProvider.GetBinder(modelBinderProviderContext); // Assert Assert.NotNull(binderforType); await binderforType.BindModelAsync(modelBindingContext); var newValue = modelBindingContext.Result.Model as PurchaseOrder; Assert.NotNull(newValue); Assert.Equal(value.billTo.street, newValue.billTo.street); Assert.Equal(value.shipTo.street, newValue.shipTo.street); }