From 756cd2dab8d12ab954e82328a5b9732114d32a27 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 30 Mar 2016 17:27:59 -0700 Subject: [PATCH] Remove OperationBindingContext This change trims a few concepts that aren't really needed inside ModelBinders anymore, and removes the OperationBindingContext class. --- .../ModelBinding/ModelBindingContext.cs | 27 +- .../ModelBinding/OperationBindingContext.cs | 49 --- .../ControllerBase.cs | 19 +- .../ControllerContext.cs | 54 ---- .../MvcCoreServiceCollectionExtensions.cs | 14 +- .../Internal/ControllerActionInvoker.cs | 3 - .../ControllerActionInvokerProvider.cs | 3 - .../Internal/ControllerArgumentBinder.cs | 57 ++-- .../Internal/DefaultModelBindingContext.cs | 293 ++++++++++-------- .../Internal/DefaultObjectValidator.cs | 22 +- .../Internal/FilterActionInvoker.cs | 12 - .../Internal/MvcCoreMvcOptionsSetup.cs | 2 +- .../Binders/BinderTypeModelBinder.cs | 2 +- .../ModelBinding/Binders/BodyModelBinder.cs | 33 +- .../Binders/BodyModelBinderProvider.cs | 14 +- .../Binders/CancellationTokenModelBinder.cs | 2 +- .../Binders/CollectionModelBinder.cs | 9 +- .../Binders/ComplexTypeModelBinder.cs | 31 +- .../Binders/DictionaryModelBinder.cs | 4 +- .../Binders/FormCollectionModelBinder.cs | 2 +- .../Binders/FormFileModelBinder.cs | 2 +- .../ModelBinding/Binders/HeaderModelBinder.cs | 2 +- .../Binders/KeyValuePairModelBinder.cs | 6 +- .../Binders/ServicesModelBinder.cs | 2 +- .../ModelBinding/ModelBindingHelper.cs | 143 ++------- .../Validation/IObjectModelValidator.cs | 2 - .../ApiController.cs | 8 +- .../HttpRequestMessageModelBinder.cs | 2 +- .../ControllerBaseTest.cs | 38 ++- .../DefaultControllerActivatorTest.cs | 12 +- .../DefaultControllerFactoryTest.cs | 17 +- .../Internal/ControllerActionInvokerTest.cs | 6 +- .../Internal/ControllerArgumentBinderTests.cs | 9 - .../Internal/DefaultObjectValidatorTests.cs | 100 ++---- .../Binders/ArrayModelBinderTest.cs | 53 ++-- .../Binders/BinderTypeModelBinderTest.cs | 11 +- .../Binders/BodyModelBinderProviderTest.cs | 11 +- .../Binders/BodyModelBinderTests.cs | 39 +-- .../Binders/ByteArrayModelBinderTests.cs | 4 - .../CancellationTokenModelBinderTests.cs | 14 +- .../Binders/CollectionModelBinderTest.cs | 21 +- .../Binders/ComplexTypeModelBinderTest.cs | 115 +++---- .../Binders/DictionaryModelBinderTest.cs | 45 +-- .../Binders/FormCollectionModelBinderTest.cs | 12 +- .../Binders/FormFileModelBinderTest.cs | 19 +- .../Binders/HeaderModelBinderTests.cs | 22 +- .../Binders/KeyValuePairModelBinderTest.cs | 32 +- .../Binders/ServicesModelBinderTest.cs | 19 +- .../DefaultModelBindingContextTest.cs | 40 +-- .../ModelBinding/ModelBindingHelperTest.cs | 64 +--- .../ActionParametersIntegrationTest.cs | 48 +-- .../ArrayModelBinderIntegrationTest.cs | 48 +-- ...nderTypeBasedModelBinderIntegrationTest.cs | 42 +-- .../BodyValidationIntegrationTests.cs | 94 +++--- .../ByteArrayModelBinderIntegrationTest.cs | 18 +- ...ellationTokenModelBinderIntegrationTest.cs | 18 +- .../CollectionModelBinderIntegrationTest.cs | 102 +++--- .../DictionaryModelBinderIntegrationTest.cs | 66 ++-- ...eBindingMetadataProviderIntegrationTest.cs | 25 +- ...rmCollectionModelBindingIntegrationTest.cs | 18 +- .../FormFileModelBindingIntegrationTest.cs | 36 +-- .../GenericModelBinderIntegrationTest.cs | 84 ++--- .../HeaderModelBinderIntegrationTest.cs | 38 +-- .../KeyValuePairModelBinderIntegrationTest.cs | 72 ++--- .../ModelBindingTestContext.cs | 12 + .../ModelBindingTestHelper.cs | 50 +-- .../ModelPrefixSelectionIntegrationTest.cs | 30 +- ...MutableObjectModelBinderIntegrationTest.cs | 258 +++++++-------- .../ServicesModelBinderIntegrationTest.cs | 28 +- .../SimpleTypeModelBinderIntegrationTest.cs | 66 ++-- .../TryUpdateModelIntegrationTest.cs | 150 +++++---- .../TryValidateModelIntegrationTest.cs | 51 +-- .../ValidationIntegrationTests.cs | 196 ++++++------ .../TestModelValidatorProvider.cs | 2 +- .../ControllerTest.cs | 17 +- .../HttpRequestMessageModelBinderTest.cs | 16 +- 76 files changed, 1346 insertions(+), 1761 deletions(-) delete mode 100644 src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/OperationBindingContext.cs create mode 100644 test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestContext.cs diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelBindingContext.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelBindingContext.cs index 0a1a711686..2f6f13d5fd 100644 --- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelBindingContext.cs +++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelBindingContext.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; namespace Microsoft.AspNetCore.Mvc.ModelBinding @@ -11,6 +12,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// public abstract class ModelBindingContext { + /// + /// Represents the associated with this context. + /// + /// + /// The property setter is provided for unit testing purposes only. + /// + public abstract ActionContext ActionContext { get; set; } + /// /// Gets or sets a model name which is explicitly set using an . /// @@ -27,6 +36,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// public abstract string FieldName { get; set; } + /// + /// Gets the associated with this context. + /// + public virtual HttpContext HttpContext => ActionContext?.HttpContext; + /// /// Gets or sets an indication that the current binder is handling the top-level object. /// @@ -57,6 +71,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// Gets or sets the used to capture values /// for properties in the object graph of the model when binding. /// + /// + /// The property setter is provided for unit testing purposes only. + /// public abstract ModelStateDictionary ModelState { get; set; } /// @@ -65,12 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// /// The property must be set to access this property. /// - public abstract Type ModelType { get; } - - /// - /// Represents the associated with this context. - /// - public abstract OperationBindingContext OperationBindingContext { get; set; } + public virtual Type ModelType => ModelMetadata.ModelType; /// /// Gets or sets a predicate which will be evaluated for each property to determine if the property @@ -82,6 +94,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// Gets or sets the . Used for tracking validation state to /// customize validation behavior for a model object. /// + /// + /// The property setter is provided for unit testing purposes only. + /// public abstract ValidationStateDictionary ValidationState { get; set; } /// diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/OperationBindingContext.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/OperationBindingContext.cs deleted file mode 100644 index e5a21af2de..0000000000 --- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/OperationBindingContext.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Generic; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.Formatters; -using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; - -namespace Microsoft.AspNetCore.Mvc.ModelBinding -{ - /// - /// A context that contains information specific to the current request and the action whose parameters - /// are being model bound. - /// - public class OperationBindingContext - { - /// - /// Gets or sets the for the current request. - /// - public ActionContext ActionContext { get; set; } - - /// - /// Gets the for the current request. - /// - public HttpContext HttpContext => ActionContext.HttpContext; - - /// - /// Gets or sets the set of instances associated with this context. - /// - public IList InputFormatters { get; set; } - - /// - /// Gets unaltered value provider collection. - /// Value providers can be filtered by specific model binders. - /// - public IValueProvider ValueProvider { get; set; } - - /// - /// Gets or sets the associated with this context. - /// - public IModelMetadataProvider MetadataProvider { get; set; } - - /// - /// Gets or sets the instance used for model validation with this - /// context. - /// - public IModelValidatorProvider ValidatorProvider { get; set; } - } -} diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs b/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs index dbb5e939d5..f387c03757 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs @@ -1121,9 +1121,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, valueProvider, - ControllerContext.InputFormatters, - ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders)); + ObjectValidator); } /// @@ -1161,9 +1159,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, new CompositeValueProvider(ControllerContext.ValueProviders), - ControllerContext.InputFormatters, ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), includeExpressions); } @@ -1201,9 +1197,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, new CompositeValueProvider(ControllerContext.ValueProviders), - ControllerContext.InputFormatters, ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), propertyFilter); } @@ -1249,9 +1243,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, valueProvider, - ControllerContext.InputFormatters, ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), includeExpressions); } @@ -1296,9 +1288,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, valueProvider, - ControllerContext.InputFormatters, ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), propertyFilter); } @@ -1335,9 +1325,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, new CompositeValueProvider(ControllerContext.ValueProviders), - ControllerContext.InputFormatters, - ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders)); + ObjectValidator); } /// @@ -1387,9 +1375,7 @@ namespace Microsoft.AspNetCore.Mvc MetadataProvider, ModelBinderFactory, valueProvider, - ControllerContext.InputFormatters, ObjectValidator, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), propertyFilter); } @@ -1429,7 +1415,6 @@ namespace Microsoft.AspNetCore.Mvc ObjectValidator.Validate( ControllerContext, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), validationState: null, prefix: prefix ?? string.Empty, model: model); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ControllerContext.cs b/src/Microsoft.AspNetCore.Mvc.Core/ControllerContext.cs index a63c612f63..690a029f67 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ControllerContext.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ControllerContext.cs @@ -5,9 +5,7 @@ using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Core; -using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; namespace Microsoft.AspNetCore.Mvc { @@ -16,8 +14,6 @@ namespace Microsoft.AspNetCore.Mvc /// public class ControllerContext : ActionContext { - private FormatterCollection _inputFormatters; - private IList _validatorProviders; private IList _valueProviders; /// @@ -55,56 +51,6 @@ namespace Microsoft.AspNetCore.Mvc set { base.ActionDescriptor = value; } } - /// - /// Gets or sets the list of instances for the current request. - /// - public virtual FormatterCollection InputFormatters - { - get - { - if (_inputFormatters == null) - { - _inputFormatters = new FormatterCollection(); - } - - return _inputFormatters; - } - set - { - if (value == null) - { - throw new ArgumentNullException(nameof(value)); - } - - _inputFormatters = value; - } - } - - /// - /// Gets or sets the list of instances for the current request. - /// - public virtual IList ValidatorProviders - { - get - { - if (_validatorProviders == null) - { - _validatorProviders = new List(); - } - - return _validatorProviders; - } - set - { - if (value == null) - { - throw new ArgumentNullException(nameof(value)); - } - - _validatorProviders = value; - } - } - /// /// Gets or sets the list of instances for the current request. /// diff --git a/src/Microsoft.AspNetCore.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs b/src/Microsoft.AspNetCore.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs index 17b5c83db8..1d1a4eb3e2 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/DependencyInjection/MvcCoreServiceCollectionExtensions.cs @@ -178,18 +178,22 @@ namespace Microsoft.Extensions.DependencyInjection ServiceDescriptor.Singleton()); // - // ModelBinding, Validation and Formatting + // ModelBinding, Validation // // The DefaultModelMetadataProvider does significant caching and should be a singleton. services.TryAddSingleton(); - services.TryAdd(ServiceDescriptor.Transient(serviceProvider => + services.TryAdd(ServiceDescriptor.Transient(s => { - var options = serviceProvider.GetRequiredService>().Value; + var options = s.GetRequiredService>().Value; return new DefaultCompositeMetadataDetailsProvider(options.ModelMetadataDetailsProviders); })); services.TryAddSingleton(); - services.TryAddSingleton(); - services.TryAddSingleton(); + services.TryAddSingleton(s => + { + var options = s.GetRequiredService>().Value; + var metadataProvider = s.GetRequiredService(); + return new DefaultObjectValidator(metadataProvider, options.ModelValidatorProviders); + }); services.TryAddSingleton(); // diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvoker.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvoker.cs index 21367a6e52..522194bbc6 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvoker.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvoker.cs @@ -13,7 +13,6 @@ using Microsoft.AspNetCore.Mvc.Core; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Logging; @@ -32,7 +31,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal ControllerActionDescriptor descriptor, IReadOnlyList inputFormatters, IControllerActionArgumentBinder argumentBinder, - IReadOnlyList modelValidatorProviders, IReadOnlyList valueProviderFactories, ILogger logger, DiagnosticSource diagnosticSource, @@ -41,7 +39,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal actionContext, controllerActionInvokerCache, inputFormatters, - modelValidatorProviders, valueProviderFactories, logger, diagnosticSource, diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvokerProvider.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvokerProvider.cs index adab7bde3f..c1dfed330b 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvokerProvider.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerActionInvokerProvider.cs @@ -21,7 +21,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal private readonly IControllerFactory _controllerFactory; private readonly ControllerActionInvokerCache _controllerActionInvokerCache; private readonly IReadOnlyList _inputFormatters; - private readonly IReadOnlyList _modelValidatorProviders; private readonly IReadOnlyList _valueProviderFactories; private readonly int _maxModelValidationErrors; private readonly ILogger _logger; @@ -39,7 +38,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal _controllerActionInvokerCache = controllerActionInvokerCache; _argumentBinder = argumentBinder; _inputFormatters = optionsAccessor.Value.InputFormatters.ToArray(); - _modelValidatorProviders = optionsAccessor.Value.ModelValidatorProviders.ToArray(); _valueProviderFactories = optionsAccessor.Value.ValueProviderFactories.ToArray(); _maxModelValidationErrors = optionsAccessor.Value.MaxModelValidationErrors; _logger = loggerFactory.CreateLogger(); @@ -70,7 +68,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal actionDescriptor, _inputFormatters, _argumentBinder, - _modelValidatorProviders, _valueProviderFactories, _logger, _diagnosticSource, diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerArgumentBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerArgumentBinder.cs index dba8f14fb8..72341226ff 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerArgumentBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/ControllerArgumentBinder.cs @@ -39,12 +39,12 @@ namespace Microsoft.AspNetCore.Mvc.Internal } public Task> BindActionArgumentsAsync( - ControllerContext context, + ControllerContext controllerContext, object controller) { - if (context == null) + if (controllerContext == null) { - throw new ArgumentNullException(nameof(context)); + throw new ArgumentNullException(nameof(controllerContext)); } if (controller == null) @@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal throw new ArgumentNullException(nameof(controller)); } - if (context.ActionDescriptor == null) + if (controllerContext.ActionDescriptor == null) { throw new ArgumentException(Resources.FormatPropertyOfTypeCannotBeNull( nameof(ControllerContext.ActionDescriptor), @@ -61,7 +61,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal // Perf: Avoid allocating async state machines where possible. We only need the state // machine if you need to bind properties. - var actionDescriptor = context.ActionDescriptor; + var actionDescriptor = controllerContext.ActionDescriptor; if (actionDescriptor.BoundProperties.Count == 0 && actionDescriptor.Parameters.Count == 0) { @@ -70,53 +70,51 @@ namespace Microsoft.AspNetCore.Mvc.Internal } else if (actionDescriptor.BoundProperties.Count == 0) { - var operationBindingContext = GetOperationBindingContext(context); - return PopulateArgumentsAsync(operationBindingContext, actionDescriptor.Parameters); + return PopulateArgumentsAsync(controllerContext, actionDescriptor.Parameters); } else { return BindActionArgumentsAndPropertiesCoreAsync( - context, + controllerContext, controller, actionDescriptor); } } private async Task> BindActionArgumentsAndPropertiesCoreAsync( - ControllerContext context, + ControllerContext controllerContext, object controller, ControllerActionDescriptor actionDescriptor) { - var operationBindingContext = GetOperationBindingContext(context); - var controllerProperties = await PopulateArgumentsAsync( - operationBindingContext, + controllerContext, actionDescriptor.BoundProperties); ActivateProperties(actionDescriptor, controller, controllerProperties); var actionArguments = await PopulateArgumentsAsync( - operationBindingContext, + controllerContext, actionDescriptor.Parameters); return actionArguments; } public async Task BindModelAsync( ParameterDescriptor parameter, - OperationBindingContext operationContext) + ControllerContext controllerContext) { if (parameter == null) { throw new ArgumentNullException(nameof(parameter)); } - if (operationContext == null) + if (controllerContext == null) { - throw new ArgumentNullException(nameof(operationContext)); + throw new ArgumentNullException(nameof(controllerContext)); } var metadata = _modelMetadataProvider.GetMetadataForType(parameter.ParameterType); var modelBindingContext = DefaultModelBindingContext.CreateBindingContext( - operationContext, + controllerContext, + new CompositeValueProvider(controllerContext.ValueProviders), metadata, parameter.BindingInfo, parameter.Name); @@ -150,8 +148,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) { _validator.Validate( - operationContext.ActionContext, - operationContext.ValidatorProvider, + controllerContext, modelBindingContext.ValidationState, modelBindingResult.Value.Key, modelBindingResult.Value.Model); @@ -243,16 +240,16 @@ namespace Microsoft.AspNetCore.Mvc.Internal } private async Task> PopulateArgumentsAsync( - OperationBindingContext operationContext, - IList parameterMetadata) + ControllerContext controllerContext, + IList parameters) { var arguments = new Dictionary(StringComparer.Ordinal); // Perf: Avoid allocations - for (var i = 0; i < parameterMetadata.Count; i++) + for (var i = 0; i < parameters.Count; i++) { - var parameter = parameterMetadata[i]; - var modelBindingResult = await BindModelAsync(parameter, operationContext); + var parameter = parameters[i]; + var modelBindingResult = await BindModelAsync(parameter, controllerContext); if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) { arguments[parameter.Name] = modelBindingResult.Value.Model; @@ -261,17 +258,5 @@ namespace Microsoft.AspNetCore.Mvc.Internal return arguments; } - - private OperationBindingContext GetOperationBindingContext(ControllerContext context) - { - return new OperationBindingContext - { - ActionContext = context, - InputFormatters = context.InputFormatters, - ValidatorProvider = new CompositeModelValidatorProvider(context.ValidatorProviders), - MetadataProvider = _modelMetadataProvider, - ValueProvider = new CompositeValueProvider(context.ValueProviders), - }; - } } } diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultModelBindingContext.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultModelBindingContext.cs index a0e3025fe9..b6ee8319d9 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultModelBindingContext.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultModelBindingContext.cs @@ -12,7 +12,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// public class DefaultModelBindingContext : ModelBindingContext { - private OperationBindingContext _operationBindingContext; + private IValueProvider _originalValueProvider; + private ActionContext _actionContext; + private ModelStateDictionary _modelState; + private ValidationStateDictionary _validationState; private State _state; private readonly Stack _stack = new Stack(); @@ -24,138 +27,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding { } - /// - /// Creates a new for top-level model binding operation. - /// - /// - /// The associated with the binding operation. - /// - /// associated with the model. - /// associated with the model. - /// The name of the property or parameter being bound. - /// A new instance of . - public static ModelBindingContext CreateBindingContext( - OperationBindingContext operationBindingContext, - ModelMetadata metadata, - BindingInfo bindingInfo, - string modelName) - { - if (operationBindingContext == null) - { - throw new ArgumentNullException(nameof(operationBindingContext)); - } - - if (metadata == null) - { - throw new ArgumentNullException(nameof(metadata)); - } - - if (modelName == null) - { - throw new ArgumentNullException(nameof(modelName)); - } - - var binderModelName = bindingInfo?.BinderModelName ?? metadata.BinderModelName; - var propertyFilterProvider = bindingInfo?.PropertyFilterProvider ?? metadata.PropertyFilterProvider; - - var valueProvider = operationBindingContext.ValueProvider; - var bindingSource = bindingInfo?.BindingSource ?? metadata.BindingSource; - if (bindingSource != null && !bindingSource.IsGreedy) - { - valueProvider = FilterValueProvider(operationBindingContext.ValueProvider, bindingSource); - } - - return new DefaultModelBindingContext() - { - BinderModelName = binderModelName, - BindingSource = bindingSource, - PropertyFilter = propertyFilterProvider?.PropertyFilter, - - // Because this is the top-level context, FieldName and ModelName should be the same. - FieldName = binderModelName ?? modelName, - ModelName = binderModelName ?? modelName, - - IsTopLevelObject = true, - ModelMetadata = metadata, - ModelState = operationBindingContext.ActionContext.ModelState, - OperationBindingContext = operationBindingContext, - ValueProvider = valueProvider, - - ValidationState = new ValidationStateDictionary(), - }; - } - /// - public override NestedScope EnterNestedScope( - ModelMetadata modelMetadata, - string fieldName, - string modelName, - object model) + public override ActionContext ActionContext { - if (modelMetadata == null) - { - throw new ArgumentNullException(nameof(modelMetadata)); - } - - if (fieldName == null) - { - throw new ArgumentNullException(nameof(fieldName)); - } - - if (modelName == null) - { - throw new ArgumentNullException(nameof(modelName)); - } - - var scope = EnterNestedScope(); - - // Only filter if the new BindingSource affects the value providers. Otherwise we want - // to preserve the currrent state. - if (modelMetadata.BindingSource != null && !modelMetadata.BindingSource.IsGreedy) - { - ValueProvider = FilterValueProvider(_operationBindingContext.ValueProvider, modelMetadata.BindingSource); - } - - Model = model; - ModelMetadata = modelMetadata; - ModelName = modelName; - FieldName = fieldName; - BinderModelName = modelMetadata.BinderModelName; - BindingSource = modelMetadata.BindingSource; - PropertyFilter = modelMetadata.PropertyFilterProvider?.PropertyFilter; - - IsTopLevelObject = false; - - return scope; - } - - /// - public override NestedScope EnterNestedScope() - { - _stack.Push(_state); - - Result = null; - - return new NestedScope(this); - } - - /// - protected override void ExitNestedScope() - { - _state = _stack.Pop(); - } - - /// - public override OperationBindingContext OperationBindingContext - { - get { return _operationBindingContext; } + get { return _actionContext; } set { if (value == null) { throw new ArgumentNullException(nameof(value)); } - _operationBindingContext = value; + _actionContext = value; } } @@ -211,20 +93,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// public override ModelStateDictionary ModelState { - get { return _state.ModelState; } + get { return _modelState; } set { if (value == null) { throw new ArgumentNullException(nameof(value)); } - _state.ModelState = value; + _modelState = value; } } - /// - public override Type ModelType => ModelMetadata?.ModelType; - /// public override string BinderModelName { @@ -246,6 +125,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding set { _state.IsTopLevelObject = value; } } + /// + /// Gets or sets the original value provider to be used when value providers are not filtered. + /// + public IValueProvider OriginalValueProvider + { + get { return _originalValueProvider; } + set + { + if (value == null) + { + throw new ArgumentNullException(nameof(value)); + } + _originalValueProvider = value; + } + } + /// public override IValueProvider ValueProvider { @@ -270,8 +165,15 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// public override ValidationStateDictionary ValidationState { - get { return _state.ValidationState; } - set { _state.ValidationState = value; } + get { return _validationState; } + set + { + if (value == null) + { + throw new ArgumentNullException(nameof(value)); + } + _validationState = value; + } } /// @@ -292,6 +194,131 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding } } + /// + /// Creates a new for top-level model binding operation. + /// + /// + /// The associated with the binding operation. + /// + /// The to use for binding. + /// associated with the model. + /// associated with the model. + /// The name of the property or parameter being bound. + /// A new instance of . + public static ModelBindingContext CreateBindingContext( + ActionContext actionContext, + IValueProvider valueProvider, + ModelMetadata metadata, + BindingInfo bindingInfo, + string modelName) + { + if (actionContext == null) + { + throw new ArgumentNullException(nameof(actionContext)); + } + + if (valueProvider == null) + { + throw new ArgumentNullException(nameof(valueProvider)); + } + + if (metadata == null) + { + throw new ArgumentNullException(nameof(metadata)); + } + + if (modelName == null) + { + throw new ArgumentNullException(nameof(modelName)); + } + + var binderModelName = bindingInfo?.BinderModelName ?? metadata.BinderModelName; + var propertyFilterProvider = bindingInfo?.PropertyFilterProvider ?? metadata.PropertyFilterProvider; + + var bindingSource = bindingInfo?.BindingSource ?? metadata.BindingSource; + + return new DefaultModelBindingContext() + { + ActionContext = actionContext, + BinderModelName = binderModelName, + BindingSource = bindingSource, + PropertyFilter = propertyFilterProvider?.PropertyFilter, + + // Because this is the top-level context, FieldName and ModelName should be the same. + FieldName = binderModelName ?? modelName, + ModelName = binderModelName ?? modelName, + + IsTopLevelObject = true, + ModelMetadata = metadata, + ModelState = actionContext.ModelState, + + OriginalValueProvider = valueProvider, + ValueProvider = FilterValueProvider(valueProvider, bindingSource), + + ValidationState = new ValidationStateDictionary(), + }; + } + + /// + public override NestedScope EnterNestedScope( + ModelMetadata modelMetadata, + string fieldName, + string modelName, + object model) + { + if (modelMetadata == null) + { + throw new ArgumentNullException(nameof(modelMetadata)); + } + + if (fieldName == null) + { + throw new ArgumentNullException(nameof(fieldName)); + } + + if (modelName == null) + { + throw new ArgumentNullException(nameof(modelName)); + } + + var scope = EnterNestedScope(); + + // Only filter if the new BindingSource affects the value providers. Otherwise we want + // to preserve the currrent state. + if (modelMetadata.BindingSource != null && !modelMetadata.BindingSource.IsGreedy) + { + ValueProvider = FilterValueProvider(OriginalValueProvider, modelMetadata.BindingSource); + } + + Model = model; + ModelMetadata = modelMetadata; + ModelName = modelName; + FieldName = fieldName; + BinderModelName = modelMetadata.BinderModelName; + BindingSource = modelMetadata.BindingSource; + PropertyFilter = modelMetadata.PropertyFilterProvider?.PropertyFilter; + + IsTopLevelObject = false; + + return scope; + } + + /// + public override NestedScope EnterNestedScope() + { + _stack.Push(_state); + + Result = null; + + return new NestedScope(this); + } + + /// + protected override void ExitNestedScope() + { + _state = _stack.Pop(); + } + private static IValueProvider FilterValueProvider(IValueProvider valueProvider, BindingSource bindingSource) { if (bindingSource == null || bindingSource.IsGreedy) @@ -317,8 +344,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding public IValueProvider ValueProvider; public Func PropertyFilter; - public ValidationStateDictionary ValidationState; - public ModelStateDictionary ModelState; public string BinderModelName; public BindingSource BindingSource; diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultObjectValidator.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultObjectValidator.cs index dbdceb5f85..695b7d6aaf 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultObjectValidator.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/DefaultObjectValidator.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; @@ -14,34 +15,36 @@ namespace Microsoft.AspNetCore.Mvc.Internal { private readonly IModelMetadataProvider _modelMetadataProvider; private readonly ValidatorCache _validatorCache; + private readonly IModelValidatorProvider _validatorProvider; /// /// Initializes a new instance of . /// /// The . - /// The . + /// The list of . public DefaultObjectValidator( IModelMetadataProvider modelMetadataProvider, - ValidatorCache validatorCache) + IList validatorProviders) { if (modelMetadataProvider == null) { throw new ArgumentNullException(nameof(modelMetadataProvider)); } - if (validatorCache == null) + if (validatorProviders == null) { - throw new ArgumentNullException(nameof(validatorCache)); + throw new ArgumentNullException(nameof(validatorProviders)); } _modelMetadataProvider = modelMetadataProvider; - _validatorCache = validatorCache; + _validatorCache = new ValidatorCache(); + + _validatorProvider = new CompositeModelValidatorProvider(validatorProviders); } /// public void Validate( ActionContext actionContext, - IModelValidatorProvider validatorProvider, ValidationStateDictionary validationState, string prefix, object model) @@ -51,14 +54,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal throw new ArgumentNullException(nameof(actionContext)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - var visitor = new ValidationVisitor( actionContext, - validatorProvider, + _validatorProvider, _validatorCache, _modelMetadataProvider, validationState); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/FilterActionInvoker.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/FilterActionInvoker.cs index 49ec7321ba..4861c03d56 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/FilterActionInvoker.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/FilterActionInvoker.cs @@ -20,7 +20,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal { private readonly ControllerActionInvokerCache _controllerActionInvokerCache; private readonly IReadOnlyList _inputFormatters; - private readonly IReadOnlyList _modelValidatorProviders; private readonly IReadOnlyList _valueProviderFactories; private readonly DiagnosticSource _diagnosticSource; private readonly int _maxModelValidationErrors; @@ -46,7 +45,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal ActionContext actionContext, ControllerActionInvokerCache controllerActionInvokerCache, IReadOnlyList inputFormatters, - IReadOnlyList modelValidatorProviders, IReadOnlyList valueProviderFactories, ILogger logger, DiagnosticSource diagnosticSource, @@ -67,11 +65,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal throw new ArgumentNullException(nameof(inputFormatters)); } - if (modelValidatorProviders == null) - { - throw new ArgumentNullException(nameof(modelValidatorProviders)); - } - if (valueProviderFactories == null) { throw new ArgumentNullException(nameof(valueProviderFactories)); @@ -91,7 +84,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal _controllerActionInvokerCache = controllerActionInvokerCache; _inputFormatters = inputFormatters; - _modelValidatorProviders = modelValidatorProviders; _valueProviderFactories = valueProviderFactories; Logger = logger; _diagnosticSource = diagnosticSource; @@ -346,10 +338,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal { // We've reached the end of resource filters, so move to setting up state to invoke model // binding. - Context.InputFormatters = new FormatterCollection( - new CopyOnWriteList(_inputFormatters)); - Context.ValidatorProviders = new CopyOnWriteList(_modelValidatorProviders); - var valueProviders = new List(); var factoryContext = new ValueProviderFactoryContext(Context); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs b/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs index 713a1278c8..b71ab8554f 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Internal/MvcCoreMvcOptionsSetup.cs @@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal // Set up ModelBinding options.ModelBinderProviders.Add(new BinderTypeModelBinderProvider()); options.ModelBinderProviders.Add(new ServicesModelBinderProvider()); - options.ModelBinderProviders.Add(new BodyModelBinderProvider(_readerFactory)); + options.ModelBinderProviders.Add(new BodyModelBinderProvider(options.InputFormatters, _readerFactory)); options.ModelBinderProviders.Add(new HeaderModelBinderProvider()); options.ModelBinderProviders.Add(new SimpleTypeModelBinderProvider()); options.ModelBinderProviders.Add(new CancellationTokenModelBinderProvider()); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BinderTypeModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BinderTypeModelBinder.cs index 4de5f164f4..3aa7b7b5ac 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BinderTypeModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BinderTypeModelBinder.cs @@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders throw new ArgumentNullException(nameof(bindingContext)); } - var requestServices = bindingContext.OperationBindingContext.HttpContext.RequestServices; + var requestServices = bindingContext.HttpContext.RequestServices; var binder = (IModelBinder)_factory(requestServices, arguments: null); await binder.BindModelAsync(bindingContext); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinder.cs index b5cd8a422f..36de8bb856 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinder.cs @@ -2,8 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Core; @@ -18,17 +18,30 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders /// public class BodyModelBinder : IModelBinder { + private readonly IList _formatters; private readonly Func _readerFactory; /// /// Creates a new . /// + /// The list of . /// /// The , used to create /// instances for reading the request body. /// - public BodyModelBinder(IHttpRequestStreamReaderFactory readerFactory) + public BodyModelBinder(IList formatters, IHttpRequestStreamReaderFactory readerFactory) { + if (formatters == null) + { + throw new ArgumentNullException(nameof(formatters)); + } + + if (readerFactory == null) + { + throw new ArgumentNullException(nameof(readerFactory)); + } + + _formatters = formatters; _readerFactory = readerFactory.CreateReader; } @@ -53,7 +66,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders modelBindingKey = bindingContext.ModelName; } - var httpContext = bindingContext.OperationBindingContext.HttpContext; + var httpContext = bindingContext.HttpContext; var formatterContext = new InputFormatterContext( httpContext, @@ -62,13 +75,19 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders bindingContext.ModelMetadata, _readerFactory); - var formatters = bindingContext.OperationBindingContext.InputFormatters; - var formatter = formatters.FirstOrDefault(f => f.CanRead(formatterContext)); + var formatter = (IInputFormatter)null; + for (var i = 0; i < _formatters.Count; i++) + { + if (_formatters[i].CanRead(formatterContext)) + { + formatter = _formatters[i]; + break; + } + } if (formatter == null) { - var message = Resources.FormatUnsupportedContentType( - bindingContext.OperationBindingContext.HttpContext.Request.ContentType); + var message = Resources.FormatUnsupportedContentType(httpContext.Request.ContentType); var exception = new UnsupportedContentTypeException(message); bindingContext.ModelState.AddModelError(modelBindingKey, exception, bindingContext.ModelMetadata); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinderProvider.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinderProvider.cs index 07b933b4bd..ac2818c33f 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinderProvider.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/BodyModelBinderProvider.cs @@ -2,6 +2,8 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.Internal; namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders @@ -11,19 +13,27 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders /// public class BodyModelBinderProvider : IModelBinderProvider { + private readonly IList _formatters; private readonly IHttpRequestStreamReaderFactory _readerFactory; /// /// Creates a new . /// + /// The list of . /// The . - public BodyModelBinderProvider(IHttpRequestStreamReaderFactory readerFactory) + public BodyModelBinderProvider(IList formatters, IHttpRequestStreamReaderFactory readerFactory) { + if (formatters == null) + { + throw new ArgumentNullException(nameof(formatters)); + } + if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } + _formatters = formatters; _readerFactory = readerFactory; } @@ -38,7 +48,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders if (context.BindingInfo?.BindingSource != null && context.BindingInfo.BindingSource.CanAcceptDataFrom(BindingSource.Body)) { - return new BodyModelBinder(_readerFactory); + return new BodyModelBinder(_formatters, _readerFactory); } return null; diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CancellationTokenModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CancellationTokenModelBinder.cs index 5ee4975da0..c76ce816cd 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CancellationTokenModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CancellationTokenModelBinder.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // in both the ValidationState and ModelBindingResult. // // DO NOT simplify this code by removing the cast. - var model = (object)bindingContext.OperationBindingContext.HttpContext.RequestAborted; + var model = (object)bindingContext.HttpContext.RequestAborted; bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true }); bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CollectionModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CollectionModelBinder.cs index 23fc5e83d7..47d3405726 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CollectionModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/CollectionModelBinder.cs @@ -158,10 +158,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ValueProviderResult values) { var boundCollection = new List(); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var elementMetadata = metadataProvider.GetMetadataForType(typeof(TElement)); - + + var elementMetadata = bindingContext.ModelMetadata.ElementMetadata; foreach (var value in values) { @@ -223,8 +221,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders .Select(i => i.ToString(CultureInfo.InvariantCulture)); } - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var elementMetadata = metadataProvider.GetMetadataForType(typeof(TElement)); + var elementMetadata = bindingContext.ModelMetadata.ElementMetadata; var boundCollection = new List(); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ComplexTypeModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ComplexTypeModelBinder.cs index 0100f8aa81..71a3154822 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ComplexTypeModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ComplexTypeModelBinder.cs @@ -252,8 +252,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders modelName: modelName, model: null)) { - // If any property can return a true value. - if (CanBindValue(bindingContext)) + // If any property can be bound from a value provider then continue. + if (bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName)) { return true; } @@ -271,33 +271,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders return false; } - private bool CanBindValue(ModelBindingContext bindingContext) - { - var valueProvider = bindingContext.ValueProvider; - - var bindingSource = bindingContext.BindingSource; - if (bindingSource != null && !bindingSource.IsGreedy) - { - var rootValueProvider = bindingContext.OperationBindingContext.ValueProvider as IBindingSourceValueProvider; - if (rootValueProvider != null) - { - valueProvider = rootValueProvider.Filter(bindingSource); - if (valueProvider == null) - { - // Unable to find a value provider for this binding source. Binding will fail. - return false; - } - } - } - - if (valueProvider.ContainsPrefix(bindingContext.ModelName)) - { - return true; - } - - return false; - } - // Internal for tests internal static bool CanUpdatePropertyInternal(ModelMetadata propertyMetadata) { diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/DictionaryModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/DictionaryModelBinder.cs index 931b364ee2..39d2d82ea4 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/DictionaryModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/DictionaryModelBinder.cs @@ -81,8 +81,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders } // Update the existing successful but empty ModelBindingResult. - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var valueMetadata = metadataProvider.GetMetadataForType(typeof(TValue)); + var elementMetadata = bindingContext.ModelMetadata.ElementMetadata; + var valueMetadata = elementMetadata.Properties[nameof(KeyValuePair.Value)]; var keyMappings = new Dictionary(StringComparer.Ordinal); foreach (var kvp in keys) diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormCollectionModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormCollectionModelBinder.cs index e3c10f2e67..2d93d5dadd 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormCollectionModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormCollectionModelBinder.cs @@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders } object model; - var request = bindingContext.OperationBindingContext.HttpContext.Request; + var request = bindingContext.HttpContext.Request; if (request.HasFormContentType) { var form = await request.ReadFormAsync(); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormFileModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormFileModelBinder.cs index a9eb164714..7e86c74f55 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormFileModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/FormFileModelBinder.cs @@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelBindingContext bindingContext, ICollection postedFiles) { - var request = bindingContext.OperationBindingContext.HttpContext.Request; + var request = bindingContext.HttpContext.Request; if (request.HasFormContentType) { var form = await request.ReadFormAsync(); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs index 8aa1e2d42c..8b4de798b1 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders throw new ArgumentNullException(nameof(bindingContext)); } - var request = bindingContext.OperationBindingContext.HttpContext.Request; + var request = bindingContext.HttpContext.Request; // Property name can be null if the model metadata represents a type (rather than a property or parameter). var headerName = bindingContext.FieldName; diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/KeyValuePairModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/KeyValuePairModelBinder.cs index 4732fd9dd8..247c205dfc 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/KeyValuePairModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/KeyValuePairModelBinder.cs @@ -97,10 +97,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders IModelBinder binder, string propertyName) { - var propertyModelMetadata = - bindingContext.OperationBindingContext.MetadataProvider.GetMetadataForType(typeof(TModel)); - var propertyModelName = - ModelNames.CreatePropertyModelName(bindingContext.ModelName, propertyName); + var propertyModelMetadata = bindingContext.ModelMetadata.Properties[propertyName]; + var propertyModelName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, propertyName); using (bindingContext.EnterNestedScope( modelMetadata: propertyModelMetadata, diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ServicesModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ServicesModelBinder.cs index 5ccc928917..a909d378c8 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ServicesModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/ServicesModelBinder.cs @@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders throw new ArgumentNullException(nameof(bindingContext)); } - var requestServices = bindingContext.OperationBindingContext.HttpContext.RequestServices; + var requestServices = bindingContext.HttpContext.RequestServices; var model = requestServices.GetRequiredService(bindingContext.ModelType); bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true }); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/ModelBindingHelper.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/ModelBindingHelper.cs index 26a8c5aca5..ba7029496b 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/ModelBindingHelper.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/ModelBindingHelper.cs @@ -12,7 +12,6 @@ using System.Reflection; using System.Runtime.ExceptionServices; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.Core; -using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; namespace Microsoft.AspNetCore.Mvc.ModelBinding @@ -22,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// /// Updates the specified instance using the specified /// and the specified and executes - /// validation using the specified . + /// validation using the specified . /// /// The type of the model object. /// The model instance to update and validate. @@ -32,13 +31,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The provider used for reading metadata for the model type. /// The used for binding. /// The used for looking up values. - /// - /// The set of instances for deserializing the body. - /// /// The used for validating the /// bound values. - /// The used for executing validation - /// on the model instance. /// A that on completion returns true if the update is successful public static Task TryUpdateModelAsync( TModel model, @@ -47,9 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, - IList inputFormatters, - IObjectModelValidator objectModelValidator, - IModelValidatorProvider validatorProvider) + IObjectModelValidator objectModelValidator) where TModel : class { if (model == null) @@ -82,21 +74,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding throw new ArgumentNullException(nameof(valueProvider)); } - if (inputFormatters == null) - { - throw new ArgumentNullException(nameof(inputFormatters)); - } - if (objectModelValidator == null) { throw new ArgumentNullException(nameof(objectModelValidator)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - // Includes everything by default. return TryUpdateModelAsync( model, @@ -105,16 +87,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, modelBinderFactory, valueProvider, - inputFormatters, objectModelValidator, - validatorProvider, propertyFilter: (m) => true); } /// /// Updates the specified instance using the specified /// and the specified and executes validation using the specified - /// . + /// . /// /// The type of the model object. /// The model instance to update and validate. @@ -124,14 +104,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The provider used for reading metadata for the model type. /// The used for binding. /// The used for looking up values. - /// - /// The set of instances for deserializing the body. - /// /// The used for validating the /// bound values. - /// The used for executing validation - /// on the model - /// instance. /// Expression(s) which represent top level properties /// which need to be included for the current model. /// A that on completion returns true if the update is successful @@ -142,9 +116,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, - IList inputFormatters, IObjectModelValidator objectModelValidator, - IModelValidatorProvider validatorProvider, params Expression>[] includeExpressions) where TModel : class { @@ -178,21 +150,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding throw new ArgumentNullException(nameof(valueProvider)); } - if (inputFormatters == null) - { - throw new ArgumentNullException(nameof(inputFormatters)); - } - if (objectModelValidator == null) { throw new ArgumentNullException(nameof(objectModelValidator)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - if (includeExpressions == null) { throw new ArgumentNullException(nameof(includeExpressions)); @@ -208,16 +170,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, modelBinderFactory, valueProvider, - inputFormatters, objectModelValidator, - validatorProvider, - propertyFilter: propertyFilter); + propertyFilter); } /// /// Updates the specified instance using the specified /// and the specified and executes validation using the specified - /// . + /// . /// /// The type of the model object. /// The model instance to update and validate. @@ -227,13 +187,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The provider used for reading metadata for the model type. /// The used for binding. /// The used for looking up values. - /// - /// The set of instances for deserializing the body. - /// /// The used for validating the /// bound values. - /// The used for executing validation - /// on the model instance. /// /// A predicate which can be used to filter properties(for inclusion/exclusion) at runtime. /// @@ -245,9 +200,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, - IList inputFormatters, IObjectModelValidator objectModelValidator, - IModelValidatorProvider validatorProvider, Func propertyFilter) where TModel : class { @@ -281,21 +234,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding throw new ArgumentNullException(nameof(valueProvider)); } - if (inputFormatters == null) - { - throw new ArgumentNullException(nameof(inputFormatters)); - } - if (objectModelValidator == null) { throw new ArgumentNullException(nameof(objectModelValidator)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - if (propertyFilter == null) { throw new ArgumentNullException(nameof(propertyFilter)); @@ -309,16 +252,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, modelBinderFactory, valueProvider, - inputFormatters, objectModelValidator, - validatorProvider, - propertyFilter: propertyFilter); + propertyFilter); } /// /// Updates the specified instance using the specified /// and the specified and executes validation using the specified - /// . + /// . /// /// The model instance to update and validate. /// The type of model instance to update and validate. @@ -328,25 +269,18 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The provider used for reading metadata for the model type. /// The used for binding. /// The used for looking up values. - /// - /// The set of instances for deserializing the body. - /// /// The used for validating the /// bound values. - /// The used for executing validation - /// on the model instance. /// A that on completion returns true if the update is successful public static Task TryUpdateModelAsync( - object model, - Type modelType, - string prefix, - ActionContext actionContext, - IModelMetadataProvider metadataProvider, - IModelBinderFactory modelBinderFactory, - IValueProvider valueProvider, - IList inputFormatters, - IObjectModelValidator objectModelValidator, - IModelValidatorProvider validatorProvider) + object model, + Type modelType, + string prefix, + ActionContext actionContext, + IModelMetadataProvider metadataProvider, + IModelBinderFactory modelBinderFactory, + IValueProvider valueProvider, + IObjectModelValidator objectModelValidator) { if (model == null) { @@ -383,21 +317,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding throw new ArgumentNullException(nameof(valueProvider)); } - if (inputFormatters == null) - { - throw new ArgumentNullException(nameof(inputFormatters)); - } - if (objectModelValidator == null) { throw new ArgumentNullException(nameof(objectModelValidator)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - // Includes everything by default. return TryUpdateModelAsync( model, @@ -407,16 +331,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, modelBinderFactory, valueProvider, - inputFormatters, objectModelValidator, - validatorProvider, propertyFilter: (m) => true); } /// /// Updates the specified instance using the specified /// and the specified and executes validation using the specified - /// . + /// . /// /// The model instance to update and validate. /// The type of model instance to update and validate. @@ -426,13 +348,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding /// The provider used for reading metadata for the model type. /// The used for binding. /// The used for looking up values. - /// - /// The set of instances for deserializing the body. - /// /// The used for validating the /// bound values. - /// The used for executing validation - /// on the model instance. /// A predicate which can be used to /// filter properties(for inclusion/exclusion) at runtime. /// A that on completion returns true if the update is successful @@ -444,9 +361,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding IModelMetadataProvider metadataProvider, IModelBinderFactory modelBinderFactory, IValueProvider valueProvider, - IList inputFormatters, IObjectModelValidator objectModelValidator, - IModelValidatorProvider validatorProvider, Func propertyFilter) { if (model == null) @@ -484,21 +399,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding throw new ArgumentNullException(nameof(valueProvider)); } - if (inputFormatters == null) - { - throw new ArgumentNullException(nameof(inputFormatters)); - } - if (objectModelValidator == null) { throw new ArgumentNullException(nameof(objectModelValidator)); } - if (validatorProvider == null) - { - throw new ArgumentNullException(nameof(validatorProvider)); - } - if (propertyFilter == null) { throw new ArgumentNullException(nameof(propertyFilter)); @@ -515,20 +420,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding var modelMetadata = metadataProvider.GetMetadataForType(modelType); var modelState = actionContext.ModelState; - var operationBindingContext = new OperationBindingContext - { - InputFormatters = inputFormatters, - ValidatorProvider = validatorProvider, - MetadataProvider = metadataProvider, - ActionContext = actionContext, - ValueProvider = valueProvider, - }; - var modelBindingContext = DefaultModelBindingContext.CreateBindingContext( - operationBindingContext, + actionContext, + valueProvider, modelMetadata, bindingInfo: null, modelName: prefix ?? string.Empty); + modelBindingContext.Model = model; modelBindingContext.PropertyFilter = propertyFilter; @@ -555,8 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) { objectModelValidator.Validate( - operationBindingContext.ActionContext, - operationBindingContext.ValidatorProvider, + actionContext, modelBindingContext.ValidationState, modelBindingResult.Value.Key, modelBindingResult.Value.Model); diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/IObjectModelValidator.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/IObjectModelValidator.cs index d0ffa99264..1a0ca7659d 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/IObjectModelValidator.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Validation/IObjectModelValidator.cs @@ -12,7 +12,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation /// Validates the provided object. /// /// The associated with the current request. - /// The . /// The . May be null. /// /// The model prefix. Used to map the model object to entries in . @@ -20,7 +19,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation /// The model object. void Validate( ActionContext actionContext, - IModelValidatorProvider validatorProvider, ValidationStateDictionary validationState, string prefix, object model); diff --git a/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs b/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs index f89692de8f..d11f22bef9 100644 --- a/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs +++ b/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs @@ -567,13 +567,11 @@ namespace System.Web.Http /// public void Validate(TEntity entity, string keyPrefix) { - var validatidationState = new ValidationStateDictionary(); ObjectValidator.Validate( ControllerContext, - new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), - validatidationState, - keyPrefix, - entity); + validationState: null, + prefix: keyPrefix, + model: entity); } protected virtual void Dispose(bool disposing) diff --git a/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/HttpRequestMessage/HttpRequestMessageModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/HttpRequestMessage/HttpRequestMessageModelBinder.cs index 2cc20278ff..b7da750ae7 100644 --- a/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/HttpRequestMessage/HttpRequestMessageModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/HttpRequestMessage/HttpRequestMessageModelBinder.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim /// public Task BindModelAsync(ModelBindingContext bindingContext) { - var model = bindingContext.OperationBindingContext.HttpContext.GetHttpRequestMessage(); + var model = bindingContext.HttpContext.GetHttpRequestMessage(); bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true }); bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model); diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs index 649dd42431..750a4dd109 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ControllerBaseTest.cs @@ -1373,10 +1373,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test // Arrange var binder = new StubModelBinder(); var controller = GetController(binder, valueProvider: null); - controller.ControllerContext.ValidatorProviders = new List() - { - Mock.Of(), - }; + controller.ObjectValidator = new DefaultObjectValidator( + controller.MetadataProvider, + new[] { Mock.Of() }); var model = new TryValidateModelModel(); @@ -1410,10 +1409,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test var binder = new StubModelBinder(); var controller = GetController(binder, valueProvider: null); - controller.ControllerContext.ValidatorProviders = new List() - { - provider.Object, - }; + controller.ObjectValidator = new DefaultObjectValidator( + controller.MetadataProvider, + new[] { provider.Object }); // Act var result = controller.TryValidateModel(model, "Prefix"); @@ -1447,10 +1445,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test var binder = new StubModelBinder(); var controller = GetController(binder, valueProvider: null); - controller.ControllerContext.ValidatorProviders = new List() - { - provider.Object, - }; + controller.ObjectValidator = new DefaultObjectValidator( + controller.MetadataProvider, + new[] { provider.Object }); // Act var result = controller.TryValidateModel(model); @@ -1483,17 +1480,18 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var httpContext = new DefaultHttpContext(); + var validatorProviders = new[] + { + new DataAnnotationsModelValidatorProvider( + new ValidationAttributeAdapterProvider(), + new TestOptionsManager(), + stringLocalizerFactory: null), + }; + var controllerContext = new ControllerContext() { HttpContext = httpContext, ValueProviders = new[] { valueProvider, }, - ValidatorProviders = new[] - { - new DataAnnotationsModelValidatorProvider( - new ValidationAttributeAdapterProvider(), - new TestOptionsManager(), - stringLocalizerFactory: null), - }, }; var binderFactory = new Mock(); @@ -1506,7 +1504,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test ControllerContext = controllerContext, MetadataProvider = metadataProvider, ModelBinderFactory = binderFactory.Object, - ObjectValidator = new DefaultObjectValidator(metadataProvider, new ValidatorCache()), + ObjectValidator = new DefaultObjectValidator(metadataProvider, validatorProviders), }; return controller; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerActivatorTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerActivatorTest.cs index 0838bfc7df..be1cd682f9 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerActivatorTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerActivatorTest.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using System.Reflection; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Internal; @@ -126,12 +127,15 @@ namespace Microsoft.AspNetCore.Mvc.Controllers { var metadataProvider = new EmptyModelMetadataProvider(); var services = new Mock(); - services.Setup(s => s.GetService(typeof(IUrlHelper))) + services + .Setup(s => s.GetService(typeof(IUrlHelper))) .Returns(Mock.Of()); - services.Setup(s => s.GetService(typeof(IModelMetadataProvider))) + services + .Setup(s => s.GetService(typeof(IModelMetadataProvider))) .Returns(metadataProvider); - services.Setup(s => s.GetService(typeof(IObjectModelValidator))) - .Returns(new DefaultObjectValidator(metadataProvider, new ValidatorCache())); + services + .Setup(s => s.GetService(typeof(IObjectModelValidator))) + .Returns(new DefaultObjectValidator(metadataProvider, new List())); return services.Object; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerFactoryTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerFactoryTest.cs index 54aea74ad1..436693bbb9 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerFactoryTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Controllers/DefaultControllerFactoryTest.cs @@ -205,12 +205,17 @@ namespace Microsoft.AspNetCore.Mvc.Controllers { var metadataProvider = new EmptyModelMetadataProvider(); var services = new Mock(); - services.Setup(s => s.GetService(typeof(IUrlHelper))) - .Returns(Mock.Of()); - services.Setup(s => s.GetService(typeof(IModelMetadataProvider))) - .Returns(metadataProvider); - services.Setup(s => s.GetService(typeof(IObjectModelValidator))) - .Returns(new DefaultObjectValidator(metadataProvider, new ValidatorCache())); + services + .Setup(s => s.GetService(typeof(IUrlHelper))) + .Returns(Mock.Of()); + services + .Setup(s => s.GetService(typeof(IModelMetadataProvider))) + .Returns(metadataProvider); + services + .Setup(s => s.GetService(typeof(IObjectModelValidator))) + .Returns(new DefaultObjectValidator( + metadataProvider, + TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders)); return services.Object; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerTest.cs index 8dd2528159..c294271053 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerActionInvokerTest.cs @@ -2053,7 +2053,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal actionDescriptor, new IInputFormatter[0], actionArgumentsBinder.Object, - new IModelValidatorProvider[0], new IValueProviderFactory[0], new NullLoggerFactory().CreateLogger(), new DiagnosticListener("Microsoft.AspNetCore"), @@ -2108,8 +2107,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal new ControllerArgumentBinder( metadataProvider, TestModelBinderFactory.CreateDefault(metadataProvider), - new DefaultObjectValidator(metadataProvider, new ValidatorCache())), - new IModelValidatorProvider[0], + new DefaultObjectValidator(metadataProvider, new IModelValidatorProvider[0])), new IValueProviderFactory[0], new NullLoggerFactory().CreateLogger(), new DiagnosticListener("Microsoft.AspNetCore"), @@ -2233,7 +2231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal ControllerActionDescriptor descriptor, IReadOnlyList inputFormatters, IControllerActionArgumentBinder controllerActionArgumentBinder, - IReadOnlyList modelValidatorProviders, IReadOnlyList valueProviderFactories, ILogger logger, DiagnosticSource diagnosticSource, @@ -2245,7 +2242,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal descriptor, inputFormatters, controllerActionArgumentBinder, - modelValidatorProviders, valueProviderFactories, logger, diagnosticSource, diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerArgumentBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerArgumentBinderTests.cs index 99401503a9..3e45954f4f 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerArgumentBinderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/ControllerArgumentBinderTests.cs @@ -135,7 +135,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Setup(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())); @@ -149,7 +148,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Verify(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), @@ -181,7 +179,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Setup(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())); @@ -196,7 +193,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Verify(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), @@ -221,7 +217,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Setup(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())); @@ -236,7 +231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Verify(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), @@ -267,7 +261,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Setup(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())); @@ -282,7 +275,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Verify(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), @@ -637,7 +629,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal mockValidator .Setup(o => o.Validate( It.IsAny(), - It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())); diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultObjectValidatorTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultObjectValidatorTests.cs index faa985afe3..99314425a6 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultObjectValidatorTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Internal/DefaultObjectValidatorTests.cs @@ -25,7 +25,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_SimpleValueType_Valid_WithPrefix() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -38,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert AssertKeysEqual(modelState, "parameter"); @@ -52,7 +51,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_SimpleReferenceType_Valid_WithPrefix() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -65,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -80,7 +78,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_SimpleType_MaxErrorsReached() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -95,7 +92,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.False(modelState.IsValid); @@ -110,7 +107,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_SimpleType_SuppressValidation() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -123,7 +119,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter", SuppressValidation = true }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -139,7 +135,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexValueType_Valid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -153,7 +148,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -172,7 +167,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexReferenceType_Valid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -186,7 +180,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -205,7 +199,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexReferenceType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -217,7 +210,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -238,7 +231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexType_SuppressValidation() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -261,7 +253,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "person", model); + validator.Validate(actionContext, validationState, "person", model); // Assert Assert.True(modelState.IsValid); @@ -281,7 +273,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -294,7 +285,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.False(modelState.IsValid); @@ -314,7 +305,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty_EmptyPrefix() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -327,7 +317,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -347,7 +337,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_NestedComplexReferenceType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -360,7 +349,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -392,7 +381,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexType_IValidatableObject_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -406,7 +394,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.False(modelState.IsValid); @@ -447,8 +435,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal httpContext.SetupGet(x => x.RequestServices).Returns(provider); var actionContext = new ActionContext { HttpContext = httpContext.Object }; - - var validatorProvider = CreateValidatorProvider(); + var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -466,12 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal .Returns(new List()); // Act - validator.Validate( - actionContext, - validatorProvider, - validationState, - null, - model.Object); + validator.Validate(actionContext, validationState, prefix: null, model: model.Object); // Assert service.Verify(); @@ -482,7 +464,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexType_FieldsAreIgnored_Valid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -495,7 +476,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -511,7 +492,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexType_CyclesNotFollowed_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -527,7 +507,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.False(modelState.IsValid); @@ -547,7 +527,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ComplexType_ShortCircuit_WhenMaxErrorCountIsSet() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -568,7 +547,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "user", }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "user", model); + validator.Validate(actionContext, validationState, "user", model); // Assert Assert.False(modelState.IsValid); @@ -585,7 +564,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_CollectionType_ArrayOfSimpleType_Valid_DefaultKeyPattern() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -599,7 +577,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); + validator.Validate(actionContext, validationState, "parameter", model); // Assert Assert.True(modelState.IsValid); @@ -619,7 +597,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_CollectionType_ArrayOfComplexType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -631,7 +608,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -663,7 +640,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_CollectionType_ListOfComplexType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -675,7 +651,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -739,7 +715,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_IndexedCollectionTypes_Valid(object model, Type type) { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -758,7 +733,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "items", model); + validator.Validate(actionContext, validationState, "items", model); // Assert Assert.True(modelState.IsValid); @@ -781,7 +756,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_CollectionType_DictionaryOfSimpleType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -801,7 +775,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "items" }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "items", model); + validator.Validate(actionContext, validationState, "items", model); // Assert Assert.True(modelState.IsValid); @@ -829,7 +803,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_CollectionType_DictionaryOfComplexType_Invalid() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -843,7 +816,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); // Act - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); // Assert Assert.False(modelState.IsValid); @@ -890,7 +863,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_DoesntCatchExceptions_FromPropertyAccessors() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -904,7 +876,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal typeof(InvalidTimeZoneException), () => { - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); }); } @@ -913,7 +885,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_DoesNotUseOverridden_GetHashCodeOrEquals() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -927,14 +898,13 @@ namespace Microsoft.AspNetCore.Mvc.Internal }; // Act & Assert (does not throw) - validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); + validator.Validate(actionContext, validationState, string.Empty, model); } [Fact] public void Validate_ForExcludedComplexType_PropertiesMarkedAsSkipped() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -953,7 +923,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "user", }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "user", model); + validator.Validate(actionContext, validationState, "user", model); // Assert Assert.Equal(ModelValidationState.Valid, modelState.ValidationState); @@ -968,7 +938,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal public void Validate_ForExcludedCollectionType_PropertiesMarkedAsSkipped() { // Arrange - var validatorProvider = CreateValidatorProvider(); var actionContext = new ActionContext(); var modelState = actionContext.ModelState; var validationState = new ValidationStateDictionary(); @@ -984,7 +953,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal validationState.Add(model, new ValidationStateEntry() { Key = "userIds", }); // Act - validator.Validate(actionContext, validatorProvider, validationState, "userIds", model); + validator.Validate(actionContext, validationState, "userIds", model); // Assert Assert.Equal(ModelValidationState.Valid, modelState.ValidationState); @@ -995,11 +964,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal Assert.Empty(entry.Errors); } - private static IModelValidatorProvider CreateValidatorProvider() - { - return TestModelValidatorProvider.CreateDefaultProvider(); - } - private static DefaultObjectValidator CreateValidator(Type excludedType) { var excludeFilters = new List(); @@ -1008,14 +972,16 @@ namespace Microsoft.AspNetCore.Mvc.Internal excludeFilters.Add(new ValidationExcludeFilter(excludedType)); } - var provider = TestModelMetadataProvider.CreateDefaultProvider(excludeFilters.ToArray()); - return new DefaultObjectValidator(provider, new ValidatorCache()); + var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(excludeFilters.ToArray()); + var validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders; + return new DefaultObjectValidator(metadataProvider, validatorProviders); } private static DefaultObjectValidator CreateValidator(params IMetadataDetailsProvider[] providers) { - var provider = TestModelMetadataProvider.CreateDefaultProvider(providers); - return new DefaultObjectValidator(provider, new ValidatorCache()); + var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(providers); + var validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders; + return new DefaultObjectValidator(metadataProvider, validatorProviders); } private static void AssertKeysEqual(ModelStateDictionary modelState, params string[] keys) diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ArrayModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ArrayModelBinderTest.cs index ee44b4590f..20799e6772 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ArrayModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ArrayModelBinderTest.cs @@ -19,8 +19,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { "someName[0]", "42" }, { "someName[1]", "84" }, }; + var bindingContext = GetBindingContext(valueProvider); - var modelState = bindingContext.ModelState; + var metadataProvider = new TestModelMetadataProvider(); + bindingContext.ModelMetadata = metadataProvider.GetMetadataForProperty( + typeof(ModelWithIntArrayProperty), + nameof(ModelWithIntArrayProperty.ArrayProperty)); + var binder = new ArrayModelBinder(new SimpleTypeModelBinder(typeof(int))); // Act @@ -45,7 +50,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(string[])); context.ValueProvider = new TestValueProvider(new Dictionary()); @@ -72,7 +77,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ArrayProperty"); - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithArrayProperty), nameof(ModelWithArrayProperty.ArrayProperty)); @@ -112,10 +117,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { "someName[1]", "84" }, }; - var bindingContext = GetBindingContext(valueProvider, isReadOnly: false); - var modelState = bindingContext.ModelState; + var bindingContext = GetBindingContext(valueProvider); bindingContext.Model = model; + var metadataProvider = new TestModelMetadataProvider(); + metadataProvider.ForProperty( + typeof(ModelWithIntArrayProperty), + nameof(ModelWithIntArrayProperty.ArrayProperty)).BindingDetails(bd => bd.IsReadOnly = false); + bindingContext.ModelMetadata = metadataProvider.GetMetadataForProperty( + typeof(ModelWithIntArrayProperty), + nameof(ModelWithIntArrayProperty.ArrayProperty)); + var binder = new ArrayModelBinder(new SimpleTypeModelBinder(typeof(int))); // Act @@ -125,7 +137,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders Assert.NotEqual(default(ModelBindingResult), result); Assert.True(result.IsModelSet); Assert.Same(model, result.Model); - + for (var i = 0; i < arrayLength; i++) { // Array should be unchanged. @@ -147,28 +159,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders }); } - private static DefaultModelBindingContext GetBindingContext( - IValueProvider valueProvider, - bool isReadOnly = false) + private static DefaultModelBindingContext GetBindingContext(IValueProvider valueProvider) { - var metadataProvider = new TestModelMetadataProvider(); - metadataProvider.ForProperty( - typeof(ModelWithIntArrayProperty), - nameof(ModelWithIntArrayProperty.ArrayProperty)).BindingDetails(bd => bd.IsReadOnly = isReadOnly); - - var modelMetadata = metadataProvider.GetMetadataForProperty( - typeof(ModelWithIntArrayProperty), - nameof(ModelWithIntArrayProperty.ArrayProperty)); - var bindingContext = new DefaultModelBindingContext + var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = modelMetadata, ModelName = "someName", ModelState = new ModelStateDictionary(), ValueProvider = valueProvider, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metadataProvider, - }, }; return bindingContext; } @@ -177,14 +174,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { var modelBindingContext = new DefaultModelBindingContext() { - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = new TestModelMetadataProvider(), - } + HttpContext = new DefaultHttpContext(), + }, }; return modelBindingContext; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BinderTypeModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BinderTypeModelBinderTest.cs index c1d273ba91..70542b123c 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BinderTypeModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BinderTypeModelBinderTest.cs @@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders .AddSingleton() .BuildServiceProvider(); - bindingContext.OperationBindingContext.HttpContext.RequestServices = serviceProvider; + bindingContext.HttpContext.RequestServices = serviceProvider; var binder = new BinderTypeModelBinder(typeof(NotNullModelBinder)); @@ -75,23 +75,16 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadataProvider = new TestModelMetadataProvider(); metadataProvider.ForType(modelType).BindingDetails(bd => bd.BinderType = binderType); - var operationBindingContext = new OperationBindingContext + var bindingContext = new DefaultModelBindingContext { ActionContext = new ActionContext() { HttpContext = new DefaultHttpContext(), }, - MetadataProvider = metadataProvider, - ValidatorProvider = Mock.Of(), - }; - - var bindingContext = new DefaultModelBindingContext - { ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelName = "someName", ValueProvider = Mock.Of(), ModelState = new ModelStateDictionary(), - OperationBindingContext = operationBindingContext, }; return bindingContext; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderProviderTest.cs index 3b40faa9ff..7a15456b11 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderProviderTest.cs @@ -1,6 +1,8 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.Formatters; using Xunit; namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders @@ -25,7 +27,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders public void Create_WhenBindingSourceIsNotFromBody_ReturnsNull(BindingSource source) { // Arrange - var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory()); + var provider = CreateProvider(); var context = new TestModelBinderProviderContext(typeof(Person)); context.BindingInfo.BindingSource = source; @@ -41,7 +43,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders public void Create_WhenBindingSourceIsFromBody_ReturnsBinder() { // Arrange - var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory()); + var provider = CreateProvider(); var context = new TestModelBinderProviderContext(typeof(Person)); context.BindingInfo.BindingSource = BindingSource.Body; @@ -53,6 +55,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders Assert.IsType(result); } + private static BodyModelBinderProvider CreateProvider() + { + return new BodyModelBinderProvider(new List(), new TestHttpRequestStreamReaderFactory()); + } + private class Person { public string Name { get; set; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs index 62a69ee4fa..ff2cfa8705 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/BodyModelBinderTests.cs @@ -35,10 +35,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext( typeof(Person), - new[] { inputFormatter }, metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(new[] { inputFormatter }); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -59,7 +58,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(new List()); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -87,7 +86,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); bindingContext.BinderModelName = "custom"; - var binder = CreateBinder(); + var binder = CreateBinder(new List()); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -114,7 +113,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(new List()); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -137,11 +136,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext( typeof(Person), - inputFormatters: new[] { new XyzFormatter() }, httpContext: httpContext, metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(new[] { new XyzFormatter() }); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -172,11 +170,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = GetBindingContext( typeof(Person), - inputFormatters: null, httpContext: httpContext, metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(new List()); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -208,11 +205,12 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders canReadFormatter1, canReadFormatter2 }; + var provider = new TestModelMetadataProvider(); provider.ForType().BindingDetails(d => d.BindingSource = BindingSource.Body); - var bindingContext = GetBindingContext(typeof(Person), inputFormatters, metadataProvider: provider); + var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); - var binder = CreateBinder(); + var binder = CreateBinder(inputFormatters); // Act var binderResult = await binder.BindModelResultAsync(bindingContext); @@ -224,7 +222,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders private static DefaultModelBindingContext GetBindingContext( Type modelType, - IEnumerable inputFormatters = null, HttpContext httpContext = null, IModelMetadataProvider metadataProvider = null) { @@ -233,44 +230,32 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders httpContext = new DefaultHttpContext(); } - if (inputFormatters == null) - { - inputFormatters = Enumerable.Empty(); - } - if (metadataProvider == null) { metadataProvider = new EmptyModelMetadataProvider(); } - var operationBindingContext = new OperationBindingContext + var bindingContext = new DefaultModelBindingContext { ActionContext = new ActionContext() { HttpContext = httpContext, }, - InputFormatters = inputFormatters.ToList(), - MetadataProvider = metadataProvider, - }; - - var bindingContext = new DefaultModelBindingContext - { FieldName = "someField", IsTopLevelObject = true, ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelName = "someName", ValueProvider = Mock.Of(), ModelState = new ModelStateDictionary(), - OperationBindingContext = operationBindingContext, BindingSource = BindingSource.Body, }; return bindingContext; } - private static BodyModelBinder CreateBinder() + private static BodyModelBinder CreateBinder(IList formatters) { - return new BodyModelBinder(new TestHttpRequestStreamReaderFactory()); + return new BodyModelBinder(formatters, new TestHttpRequestStreamReaderFactory()); } private class Person diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ByteArrayModelBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ByteArrayModelBinderTests.cs index 54b556921b..d6c32f6ad8 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ByteArrayModelBinderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ByteArrayModelBinderTests.cs @@ -115,10 +115,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelName = "foo", ModelState = new ModelStateDictionary(), ValueProvider = valueProvider, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metadataProvider, - } }; return bindingContext; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CancellationTokenModelBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CancellationTokenModelBinderTests.cs index 91d8a05655..1c71bf0989 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CancellationTokenModelBinderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CancellationTokenModelBinderTests.cs @@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Assert Assert.NotEqual(default(ModelBindingResult), result); Assert.True(result.IsModelSet); - Assert.Equal(bindingContext.OperationBindingContext.HttpContext.RequestAborted, result.Model); + Assert.Equal(bindingContext.HttpContext.RequestAborted, result.Model); } private static DefaultModelBindingContext GetBindingContext(Type modelType) @@ -33,17 +33,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadataProvider = new EmptyModelMetadataProvider(); DefaultModelBindingContext bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = new DefaultHttpContext(), + }, ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelName = "someName", ValueProvider = new SimpleValueProvider(), - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = metadataProvider, - }, ValidationState = new ValidationStateDictionary(), }; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CollectionModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CollectionModelBinderTest.cs index ad687ec5d4..6eacf77b2b 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CollectionModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/CollectionModelBinderTest.cs @@ -187,7 +187,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { "someName", null }, }; var bindingContext = GetModelBindingContext(valueProvider, isReadOnly: false); - var modelState = bindingContext.ModelState; // Act var result = await binder.BindModelResultAsync(bindingContext); @@ -228,7 +227,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List)); context.ValueProvider = new TestValueProvider(new Dictionary()); @@ -261,7 +260,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List)); context.ValueProvider = new TestValueProvider(new Dictionary()); @@ -289,7 +288,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty"); - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithListProperty), nameof(ModelWithListProperty.ListProperty)); @@ -376,10 +375,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelName = "someName", ModelState = new ModelStateDictionary(), ValueProvider = valueProvider, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metadataProvider - }, ValidationState = new ValidationStateDictionary(), FieldName = "testfieldname", }; @@ -413,14 +408,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { var modelBindingContext = new DefaultModelBindingContext() { - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = new TestModelMetadataProvider(), - } + HttpContext = new DefaultHttpContext(), + }, }; return modelBindingContext; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ComplexTypeModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ComplexTypeModelBinderTest.cs index 16135b6b6a..2f6fae638d 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ComplexTypeModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ComplexTypeModelBinderTest.cs @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders bindingContext.IsTopLevelObject = false; bindingContext.ModelName = "SimpleContainer.Simple"; bindingContext.ValueProvider = valueProvider.Object; - bindingContext.OperationBindingContext.ValueProvider = valueProvider.Object; + bindingContext.OriginalValueProvider = valueProvider.Object; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = CreateContext(GetMetadataForType(modelType)); bindingContext.IsTopLevelObject = false; bindingContext.ValueProvider = valueProvider.Object; - bindingContext.OperationBindingContext.ValueProvider = valueProvider.Object; + bindingContext.OriginalValueProvider = valueProvider.Object; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -206,7 +206,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = CreateContext(GetMetadataForType(modelType)); bindingContext.IsTopLevelObject = false; bindingContext.ValueProvider = valueProvider.Object; - bindingContext.OperationBindingContext.ValueProvider = originalValueProvider.Object; + bindingContext.OriginalValueProvider = originalValueProvider.Object; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -239,7 +239,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var bindingContext = CreateContext(GetMetadataForType(modelType)); bindingContext.IsTopLevelObject = false; bindingContext.ValueProvider = valueProvider.Object; - bindingContext.OperationBindingContext.ValueProvider = originalValueProvider.Object; + bindingContext.OriginalValueProvider = originalValueProvider.Object; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -268,11 +268,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelMetadata = GetMetadataForType(typeof(Person)), ModelName = string.Empty, ValueProvider = mockValueProvider.Object, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = _metadataProvider, - ValidatorProvider = Mock.Of() - }, ModelState = new ModelStateDictionary(), }; @@ -405,17 +400,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() + HttpContext = new DefaultHttpContext() { - HttpContext = new DefaultHttpContext() - { - RequestServices = new ServiceCollection().BuildServiceProvider(), - }, + RequestServices = new ServiceCollection().BuildServiceProvider(), }, }, + ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), }; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -435,17 +427,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() + HttpContext = new DefaultHttpContext() { - HttpContext = new DefaultHttpContext() - { - RequestServices = new ServiceCollection().BuildServiceProvider(), - }, + RequestServices = new ServiceCollection().BuildServiceProvider(), }, }, + ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), }; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -466,17 +455,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext() - { - RequestServices = new ServiceCollection().BuildServiceProvider(), - }, - }, + HttpContext = new DefaultHttpContext(), }, + ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), }; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -499,17 +482,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadata = GetMetadataForProperty(typeof(TypeWithIncludedPropertiesUsingBindAttribute), property); var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = GetMetadataForType(typeof(TypeWithIncludedPropertiesUsingBindAttribute)), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext() - { - RequestServices = new ServiceCollection().BuildServiceProvider(), - }, - }, + HttpContext = new DefaultHttpContext() }, + ModelMetadata = GetMetadataForType(typeof(TypeWithIncludedPropertiesUsingBindAttribute)), }; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -531,17 +508,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadata = GetMetadataForProperty(typeof(ModelWithMixedBindingBehaviors), property); var bindingContext = new DefaultModelBindingContext() { - ModelMetadata = GetMetadataForType(typeof(ModelWithMixedBindingBehaviors)), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext() - { - RequestServices = new ServiceCollection().BuildServiceProvider(), - }, - }, + HttpContext = new DefaultHttpContext(), }, + ModelMetadata = GetMetadataForType(typeof(ModelWithMixedBindingBehaviors)), }; var binder = CreateBinder(bindingContext.ModelMetadata); @@ -794,9 +765,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Arrange var model = new Person(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = metadata.Properties[nameof(model.PropertyWithDefaultValue)]; var result = ModelBindingResult.Failed("foo"); @@ -817,9 +787,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Arrange var model = new Person(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValue)]; // The null model value won't be used because IsModelBound = false. @@ -842,9 +811,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Arrange var model = new Person(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValueAndDefault)]; // The null model value won't be used because IsModelBound = false. @@ -867,9 +835,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Arrange var model = new Person(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = metadata.Properties[nameof(model.NonUpdateableProperty)]; var result = ModelBindingResult.Failed("foo"); @@ -912,8 +879,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var type = model.GetType(); var bindingContext = CreateContext(GetMetadataForType(type), model); var modelState = bindingContext.ModelState; - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(type); + var metadata = GetMetadataForType(type); var propertyMetadata = bindingContext.ModelMetadata.Properties[propertyName]; var result = ModelBindingResult.Success( @@ -960,9 +926,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Arrange var model = new Person(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfBirth)]; var result = ModelBindingResult.Success("foo", new DateTime(2001, 1, 1)); @@ -987,9 +952,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders }; var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(Person)); + + var metadata = GetMetadataForType(typeof(Person)); var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfDeath)]; var result = ModelBindingResult.Success("foo", new DateTime(1800, 1, 1)); @@ -1012,9 +976,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var model = new ModelWhosePropertySetterThrows(); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); bindingContext.ModelName = "foo"; - - var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; - var metadata = metadataProvider.GetMetadataForType(typeof(ModelWhosePropertySetterThrows)); + + var metadata = GetMetadataForType(typeof(ModelWhosePropertySetterThrows)); var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.NameNoAttribute)]; var result = ModelBindingResult.Success("foo.NameNoAttribute", model: null); @@ -1068,12 +1031,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelMetadata = metadata, ModelName = "theModel", ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = _metadataProvider, - ValidatorProvider = TestModelValidatorProvider.CreateDefaultProvider(), - ValueProvider = valueProvider, - }, ValueProvider = valueProvider, }; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/DictionaryModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/DictionaryModelBinderTest.cs index d71c21b845..c7a2f789f5 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/DictionaryModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/DictionaryModelBinderTest.cs @@ -137,11 +137,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = modelName; - context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); - context.ValueProvider = context.OperationBindingContext.ValueProvider; + context.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); context.FieldName = modelName; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.DictionaryProperty)); @@ -175,11 +174,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = "prefix"; - context.OperationBindingContext.ValueProvider = CreateTestValueProvider("prefix[{0}]", dictionary); - context.ValueProvider = context.OperationBindingContext.ValueProvider; + context.ValueProvider = CreateTestValueProvider("prefix[{0}]", dictionary); context.FieldName = context.ModelName; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.DictionaryProperty)); @@ -228,12 +226,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = "prefix"; - context.OperationBindingContext.ValueProvider = - CreateEnumerableValueProvider("prefix[{0}]", stringDictionary); - context.ValueProvider = context.OperationBindingContext.ValueProvider; + context.ValueProvider = CreateEnumerableValueProvider("prefix[{0}]", stringDictionary); context.FieldName = context.ModelName; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.DictionaryWithValueTypesProperty)); @@ -269,11 +265,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = "prefix"; - context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider("{0}", stringDictionary); - context.ValueProvider = context.OperationBindingContext.ValueProvider; + context.ValueProvider = CreateEnumerableValueProvider("{0}", stringDictionary); context.FieldName = context.ModelName; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.DictionaryWithComplexValuesProperty)); @@ -328,11 +323,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = modelName; - context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); - context.ValueProvider = context.OperationBindingContext.ValueProvider; + context.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); context.FieldName = context.ModelName; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.CustomDictionaryProperty)); @@ -363,7 +357,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(Dictionary)); context.ValueProvider = new TestValueProvider(new Dictionary()); @@ -392,7 +386,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty"); - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithDictionaryProperties), nameof(ModelWithDictionaryProperties.DictionaryProperty)); @@ -444,15 +438,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { var modelBindingContext = new DefaultModelBindingContext() { - ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = new TestModelMetadataProvider(), + HttpContext = new DefaultHttpContext(), }, + ModelState = new ModelStateDictionary(), ValidationState = new ValidationStateDictionary(), }; @@ -510,11 +500,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelMetadata = metadata, ModelName = "someName", ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metadataProvider, - ValueProvider = valueProvider, - }, ValueProvider = valueProvider, ValidationState = new ValidationStateDictionary(), }; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormCollectionModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormCollectionModelBinderTest.cs index 27fa79d3fc..130173f095 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormCollectionModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormCollectionModelBinderTest.cs @@ -74,16 +74,12 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadataProvider = new EmptyModelMetadataProvider(); var bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = httpContext, + }, ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelName = "file", - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = httpContext, - }, - MetadataProvider = metadataProvider, - }, ValidationState = new ValidationStateDictionary(), }; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormFileModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormFileModelBinderTest.cs index d874396e17..cea8b9cbd1 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormFileModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/FormFileModelBinderTest.cs @@ -254,11 +254,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders metadataProvider .ForProperty(nameof(ModelWithReadOnlyArray.ArrayProperty)) .BindingDetails(bd => bd.BindingSource = BindingSource.Header); - var modelMetadata = metadataProvider.GetMetadataForProperty( + var metadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithReadOnlyArray), nameof(ModelWithReadOnlyArray.ArrayProperty)); - return GetBindingContext(metadataProvider, modelMetadata, httpContext); + return GetBindingContext(metadata, httpContext); } private static DefaultModelBindingContext GetBindingContext(Type modelType, HttpContext httpContext) @@ -266,27 +266,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var metadataProvider = new EmptyModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForType(modelType); - return GetBindingContext(metadataProvider, metadata, httpContext); + return GetBindingContext(metadata, httpContext); } private static DefaultModelBindingContext GetBindingContext( - IModelMetadataProvider metadataProvider, ModelMetadata metadata, HttpContext httpContext) { var bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = httpContext, + }, ModelMetadata = metadata, ModelName = "file", ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = httpContext, - }, - MetadataProvider = metadataProvider, - }, ValidationState = new ValidationStateDictionary(), }; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/HeaderModelBinderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/HeaderModelBinderTests.cs index eb0f120749..f611191e3a 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/HeaderModelBinderTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/HeaderModelBinderTests.cs @@ -42,7 +42,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var modelBindingContext = GetBindingContext(type); modelBindingContext.FieldName = header; - modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); + modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); // Act var result = await binder.BindModelResultAsync(modelBindingContext); @@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var modelBindingContext = GetBindingContext(type); modelBindingContext.FieldName = header; - modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); + modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); // Act var result = await binder.BindModelResultAsync(modelBindingContext); @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var modelBindingContext = GetBindingContext(destinationType); modelBindingContext.FieldName = header; - modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); + modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); // Act var result = await binder.BindModelResultAsync(modelBindingContext); @@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var modelBindingContext = GetBindingContextForReadOnlyArray(); modelBindingContext.FieldName = header; - modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); + modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); // Act var result = await binder.BindModelResultAsync(modelBindingContext); @@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var modelBindingContext = GetBindingContext(typeof(ISet)); modelBindingContext.FieldName = header; - modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); + modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); // Act var result = await binder.BindModelResultAsync(modelBindingContext); @@ -173,18 +173,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { var bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = new DefaultHttpContext(), + }, ModelMetadata = modelMetadata, ModelName = "modelName", FieldName = "modelName", ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = metadataProvider, - }, BinderModelName = modelMetadata.BinderModelName, BindingSource = modelMetadata.BindingSource, }; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/KeyValuePairModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/KeyValuePairModelBinderTest.cs index 7321eb1465..2e2864d0fc 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/KeyValuePairModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/KeyValuePairModelBinderTest.cs @@ -106,16 +106,16 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders ModelBindingResult? innerResult; if (isSuccess) { - innerResult = ModelBindingResult.Success("somename.key", model); + innerResult = ModelBindingResult.Success("somename.Key", model); } else { - innerResult = ModelBindingResult.Failed("somename.key"); + innerResult = ModelBindingResult.Failed("somename.Key"); } var innerBinder = new StubModelBinder(context => { - Assert.Equal("someName.key", context.ModelName); + Assert.Equal("someName.Key", context.ModelName); return innerResult; }); @@ -125,7 +125,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var binder = new KeyValuePairModelBinder(innerBinder, innerBinder); // Act - var result = await binder.TryBindStrongModel(bindingContext, innerBinder, "key"); + var result = await binder.TryBindStrongModel(bindingContext, innerBinder, "Key"); // Assert Assert.Equal(innerResult.Value, result); @@ -146,7 +146,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders // Lack of prefix and non-empty model name both ignored. context.ModelName = "modelName"; - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(KeyValuePair)); context.ValueProvider = new TestValueProvider(new Dictionary()); @@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders var context = CreateContext(); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "KeyValuePairProperty"); - var metadataProvider = context.OperationBindingContext.MetadataProvider; + var metadataProvider = new TestModelMetadataProvider(); context.ModelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithKeyValuePairProperty), nameof(ModelWithKeyValuePairProperty.KeyValuePairProperty)); @@ -194,13 +194,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { var modelBindingContext = new DefaultModelBindingContext() { - OperationBindingContext = new OperationBindingContext() + ActionContext = new ActionContext() { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = new TestModelMetadataProvider(), + HttpContext = new DefaultHttpContext(), }, ModelState = new ModelStateDictionary(), }; @@ -212,21 +208,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders IValueProvider valueProvider, Type keyValuePairType) { - var metataProvider = new EmptyModelMetadataProvider(); + var metadataProvider = new TestModelMetadataProvider(); var bindingContext = new DefaultModelBindingContext { - ModelMetadata = metataProvider.GetMetadataForType(keyValuePairType), + ModelMetadata = metadataProvider.GetMetadataForType(keyValuePairType), ModelName = "someName", ModelState = new ModelStateDictionary(), ValueProvider = valueProvider, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metataProvider, - ValidatorProvider = new DataAnnotationsModelValidatorProvider( - new ValidationAttributeAdapterProvider(), - new TestOptionsManager(), - stringLocalizerFactory: null) - } }; return bindingContext; } diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ServicesModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ServicesModelBinderTest.cs index f6fdb50afa..f82b033a50 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ServicesModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/Binders/ServicesModelBinderTest.cs @@ -42,27 +42,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders metadataProvider.ForType(modelType).BindingDetails(d => d.BindingSource = BindingSource.Services); var modelMetadata = metadataProvider.GetMetadataForType(modelType); - var services = new ServiceCollection(); services.AddSingleton(new Service()); var bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = new DefaultHttpContext() + { + RequestServices = services.BuildServiceProvider(), + } + }, ModelMetadata = modelMetadata, ModelName = "modelName", FieldName = "modelName", ModelState = new ModelStateDictionary(), - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext() - { - RequestServices = services.BuildServiceProvider(), - } - }, - MetadataProvider = metadataProvider, - }, BinderModelName = modelMetadata.BinderModelName, BindingSource = modelMetadata.BindingSource, ValidationState = new ValidationStateDictionary(), diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/DefaultModelBindingContextTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/DefaultModelBindingContextTest.cs index 11437f8df5..f955897f99 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/DefaultModelBindingContextTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/DefaultModelBindingContextTest.cs @@ -25,26 +25,23 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding Model = new object(), ModelMetadata = new TestModelMetadataProvider().GetMetadataForType(typeof(object)), ModelName = "theName", - OperationBindingContext = new OperationBindingContext(), ValueProvider = new SimpleValueProvider(), ModelState = new ModelStateDictionary(), }; var metadataProvider = new TestModelMetadataProvider(); metadataProvider.ForType().BindingDetails(d => - { - d.BindingSource = BindingSource.Custom; - d.BinderType = typeof(TestModelBinder); - d.BinderModelName = "custom"; - }); + { + d.BindingSource = BindingSource.Custom; + d.BinderType = typeof(TestModelBinder); + d.BinderModelName = "custom"; + }); var newModelMetadata = metadataProvider.GetMetadataForType(typeof(object)); // Act var originalBinderModelName = bindingContext.BinderModelName; var originalBindingSource = bindingContext.BindingSource; - var originalModelState = bindingContext.ModelState; - var originalOperationBindingContext = bindingContext.OperationBindingContext; var originalValueProvider = bindingContext.ValueProvider; var disposable = bindingContext.EnterNestedScope( @@ -61,8 +58,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding Assert.Null(bindingContext.Model); Assert.Same(newModelMetadata, bindingContext.ModelMetadata); Assert.Equal("modelprefix.fieldName", bindingContext.ModelName); - Assert.Same(originalModelState, bindingContext.ModelState); - Assert.Same(originalOperationBindingContext, bindingContext.OperationBindingContext); Assert.Same(originalValueProvider, bindingContext.ValueProvider); disposable.Dispose(); @@ -75,15 +70,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding var metadataProvider = new TestModelMetadataProvider(); var original = CreateDefaultValueProvider(); - var operationBindingContext = new OperationBindingContext() - { - ActionContext = new ActionContext(), - ValueProvider = original, - }; // Act var context = DefaultModelBindingContext.CreateBindingContext( - operationBindingContext, + new ActionContext(), + original, metadataProvider.GetMetadataForType(typeof(object)), new BindingInfo() { BindingSource = BindingSource.Query }, "model"); @@ -104,14 +95,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding .BindingDetails(b => b.BindingSource = BindingSource.Query); var original = CreateDefaultValueProvider(); - var operationBindingContext = new OperationBindingContext() - { - ActionContext = new ActionContext(), - ValueProvider = original, - }; - var context = DefaultModelBindingContext.CreateBindingContext( - operationBindingContext, + new ActionContext(), + original, metadataProvider.GetMetadataForType(typeof(string)), new BindingInfo(), "model"); @@ -137,14 +123,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding .BindingDetails(b => b.BindingSource = BindingSource.Form); var original = CreateDefaultValueProvider(); - var operationBindingContext = new OperationBindingContext() - { - ActionContext = new ActionContext(), - ValueProvider = original, - }; var context = DefaultModelBindingContext.CreateBindingContext( - operationBindingContext, + new ActionContext(), + original, metadataProvider.GetMetadataForType(typeof(string)), new BindingInfo() { BindingSource = BindingSource.Query }, "model"); diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/ModelBindingHelperTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/ModelBindingHelperTest.cs index a99dbf1781..e31d988ae1 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/ModelBindingHelperTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/ModelBindingHelperTest.cs @@ -52,9 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binder), Mock.Of(), - new List(), - new Mock(MockBehavior.Strict).Object, - Mock.Of()); + new Mock(MockBehavior.Strict).Object); // Assert Assert.False(result); @@ -84,7 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding { "", null } }; var valueProvider = new TestValueProvider(values); - var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); + var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var actionContext = new ActionContext() { HttpContext = new DefaultHttpContext() }; var modelState = actionContext.ModelState; @@ -94,12 +92,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding model, "", actionContext, - modelMetadataProvider, + metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(modelMetadataProvider, new ValidatorCache()), - validator); + new DefaultObjectValidator(metadataProvider, new[] { validator })); // Assert Assert.False(result); @@ -139,9 +135,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator); + new DefaultObjectValidator(metadataProvider, new[] { validator })); // Assert Assert.True(result); @@ -167,9 +161,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binder), Mock.Of(), - new List(), new Mock(MockBehavior.Strict).Object, - Mock.Of(), propertyFilter); // Assert @@ -223,9 +215,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator, + new DefaultObjectValidator(metadataProvider, new[] { validator }), propertyFilter); // Assert @@ -253,9 +243,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binder), Mock.Of(), - new List(), new Mock(MockBehavior.Strict).Object, - Mock.Of(), m => m.IncludedProperty); // Assert @@ -305,9 +293,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding TestModelMetadataProvider.CreateDefaultProvider(), GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator, + new DefaultObjectValidator(metadataProvider, new[] { validator }), m => m.IncludedProperty, m => m.MyProperty); @@ -358,9 +344,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator); + new DefaultObjectValidator(metadataProvider, new[] { validator })); // Assert // Includes everything. @@ -509,9 +493,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider: metadataProvider, modelBinderFactory: GetModelBinderFactory(binder), valueProvider: Mock.Of(), - inputFormatters: new List(), objectModelValidator: new Mock(MockBehavior.Strict).Object, - validatorProvider: Mock.Of(), propertyFilter: propertyFilter); // Assert @@ -566,9 +548,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator, + new DefaultObjectValidator(metadataProvider, new[] { validator }), propertyFilter); // Assert @@ -598,9 +578,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider: metadataProvider, modelBinderFactory: GetModelBinderFactory(binder.Object), valueProvider: Mock.Of(), - inputFormatters: new List(), - objectModelValidator: new Mock(MockBehavior.Strict).Object, - validatorProvider: Mock.Of()); + objectModelValidator: new Mock(MockBehavior.Strict).Object); // Assert Assert.False(result); @@ -637,12 +615,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding model.GetType(), "", new ActionContext() { HttpContext = new DefaultHttpContext() }, - TestModelMetadataProvider.CreateDefaultProvider(), + metadataProvider, GetModelBinderFactory(binderProviders), valueProvider, - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - validator); + new DefaultObjectValidator(metadataProvider, new[] { validator })); // Assert Assert.True(result); @@ -669,9 +645,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding metadataProvider, GetModelBinderFactory(binder.Object), Mock.Of(), - new List(), - new DefaultObjectValidator(metadataProvider, new ValidatorCache()), - Mock.Of(), + new Mock(MockBehavior.Strict).Object, propertyFilter)); var expectedMessage = string.Format("The model's runtime type '{0}' is not assignable to the type '{1}'." + @@ -1547,7 +1521,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding var modelMetadata = metadataProvider.GetMetadataForProperty( typeof(ModelWithReadOnlyAndSpecialCaseProperties), propertyName); - var bindingContext = GetBindingContext(metadataProvider, modelMetadata); + var bindingContext = GetBindingContext(modelMetadata); var container = new ModelWithReadOnlyAndSpecialCaseProperties(); bindingContext.Model = modelMetadata.PropertyGetter(container); @@ -1560,20 +1534,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding var metadataProvider = new EmptyModelMetadataProvider(); var metadata = metadataProvider.GetMetadataForType(modelType); - return GetBindingContext(metadataProvider, metadata); + return GetBindingContext(metadata); } - private static DefaultModelBindingContext GetBindingContext( - IModelMetadataProvider metadataProvider, - ModelMetadata metadata) + private static DefaultModelBindingContext GetBindingContext(ModelMetadata metadata) { var bindingContext = new DefaultModelBindingContext { ModelMetadata = metadata, - OperationBindingContext = new OperationBindingContext - { - MetadataProvider = metadataProvider, - }, }; return bindingContext; diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs index af355f1eb6..94c4c4cbfa 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ActionParametersIntegrationTest.cs @@ -40,16 +40,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person3) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person3(); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -86,15 +86,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "prefix", ParameterType = typeof(Person6) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -134,16 +134,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person4(); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -182,14 +182,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person5) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -222,15 +222,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person3) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -266,15 +266,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, ParameterType = typeof(Person6) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -313,15 +313,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -358,15 +358,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person5) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs index 81ce99b50d..bb7bc1ba2c 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ArrayModelBinderIntegrationTest.cs @@ -23,15 +23,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(int[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0]=10¶meter[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -67,15 +67,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(int[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?prefix[0]=10&prefix[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -107,15 +107,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(int[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0]=10&[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -147,15 +147,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(int[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -182,15 +182,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Name=bill¶meter[1].Name=lang"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -227,15 +227,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?prefix[0].Name=bill&prefix[1].Name=lang"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -268,15 +268,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0].Name=bill&[1].Name=lang"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -309,15 +309,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs index 2a073eebe2..bf09cc06a8 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BinderTypeBasedModelBinderIntegrationTest.cs @@ -32,11 +32,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -66,11 +66,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext); // Assert Assert.False(modelBindingResult.Value.IsModelSet); @@ -101,11 +101,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext); // Assert @@ -137,11 +137,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext); // Assert @@ -172,11 +172,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person2) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -215,11 +215,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -255,11 +255,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs index 2f4e9452fb..cfc56af4da 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/BodyValidationIntegrationTests.cs @@ -45,17 +45,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests } }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json;charset=utf-8"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -87,15 +87,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json;charset=utf-8"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinding.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var result = await argumentBinding.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelState.IsValid); @@ -120,17 +120,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ProductViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -172,17 +172,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ProductViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -213,17 +213,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ProductViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -253,17 +253,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(SoftwareViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -289,17 +289,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(SoftwareViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -332,17 +332,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(SoftwareViewModel) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -369,17 +369,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -409,18 +409,18 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.ContentType = "application/json"; }); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -452,17 +452,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -511,17 +511,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person5) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": 5 }")); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -549,17 +549,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person5) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": \"not a number\" }")); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -613,17 +613,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "param-name", }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText)); request.ContentType = "application/json"; }); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -671,16 +671,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "param-name", }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText)); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs index bf09ff0232..0147d33393 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ByteArrayModelBinderIntegrationTest.cs @@ -37,15 +37,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests // any valid base64 string var expectedValue = new byte[] { 12, 13 }; var value = Convert.ToBase64String(expectedValue); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = QueryString.Create(queryStringKey, value); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -86,11 +86,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -120,16 +120,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests // any valid base64 string var value = "four"; var expectedValue = Convert.FromBase64String(value); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = QueryString.Create("CustomParameter", value); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs index a8cbde3141..4b1a98c502 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CancellationTokenModelBinderIntegrationTest.cs @@ -36,11 +36,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -70,11 +70,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -107,11 +107,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(CancellationToken) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs index 93c1149a2f..43301c23d8 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/CollectionModelBinderIntegrationTest.cs @@ -31,15 +31,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0]=10¶meter[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -77,15 +77,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -111,15 +111,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -143,15 +143,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -182,15 +182,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -221,15 +221,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -254,15 +254,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -292,15 +292,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Id=10¶meter[1].Id=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -351,15 +351,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?prefix[0].Id=10&prefix[1].Id=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -402,15 +402,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0].Id=10&[1].Id=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -453,16 +453,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.index=low¶meter.index=high¶meter[low]=10¶meter[high]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -497,15 +497,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?index=low&index=high&[high].Id=11&[low].Id=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -548,15 +548,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -590,7 +590,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { var formCollection = new FormCollection(new Dictionary() { @@ -603,10 +603,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests request.ContentType = "application/x-www-form-urlencoded"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -648,7 +648,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person5) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { var formCollection = new FormCollection(new Dictionary() { @@ -660,10 +660,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests request.ContentType = "application/x-www-form-urlencoded"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -694,15 +694,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -919,14 +919,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.Form = new FormCollection(formContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs index 7f24cee875..d50f1ba04d 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/DictionaryModelBinderIntegrationTest.cs @@ -27,15 +27,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Key=key0¶meter[0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -67,15 +67,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[key0]=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -104,16 +104,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.index=low¶meter[low].Key=key0¶meter[low].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -156,15 +156,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -191,15 +191,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -223,15 +223,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -284,15 +284,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -324,15 +324,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -363,15 +363,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -403,15 +403,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -515,14 +515,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString(queryString); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ExcludeBindingMetadataProviderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ExcludeBindingMetadataProviderIntegrationTest.cs index 1ba6b2a82e..364bc453a0 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ExcludeBindingMetadataProviderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ExcludeBindingMetadataProviderIntegrationTest.cs @@ -36,25 +36,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(TypesBundle), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.Form = new FormCollection(new Dictionary - { - { "name", new[] { "Fred" } }, - { "type", new[] { "SomeType" } }, - { "typeArray", new[] { "SomeType1", "SomeType2" } }, - { "typeList", new[] { "SomeType1", "SomeType2" } }, - { "typeDictionary", new[] { "parameter[0].Key=key", "parameter[0].Value=value" } }, - { "methodInfo", new[] { "value" } }, - { "func", new[] { "value" } }, - } - ); + { + { "name", new[] { "Fred" } }, + { "type", new[] { "SomeType" } }, + { "typeArray", new[] { "SomeType1", "SomeType2" } }, + { "typeList", new[] { "SomeType1", "SomeType2" } }, + { "typeDictionary", new[] { "parameter[0].Key=key", "parameter[0].Value=value" } }, + { "methodInfo", new[] { "value" } }, + { "func", new[] { "value" } }, + }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs index 1adad87958..faa6bd8da7 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormCollectionModelBindingIntegrationTest.cs @@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "Some Data Is Better Than No Data."; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = QueryString.Create("Address.Zip", "12345"); UpdateRequest(request, data, "Address.File"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -92,16 +92,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "Some Data Is Better Than No Data."; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { UpdateRequest(request, data, "CustomParameter"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -136,12 +136,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs index 213c2e99b4..d1a91e4318 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/FormFileModelBindingIntegrationTest.cs @@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "Some Data Is Better Than No Data."; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = QueryString.Create("Address.Zip", "12345"); UpdateRequest(request, data, "Address.File"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -95,12 +95,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "some data"; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => UpdateRequest(request, data, "files")); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var result = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -141,12 +141,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ListContainer1), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => UpdateRequest(request, data: null, name: null)); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var result = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -186,12 +186,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "some data"; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => UpdateRequest(request, data, "files")); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var result = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -237,16 +237,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var data = "Some Data Is Better Than No Data."; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { UpdateRequest(request, data, "CustomParameter"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -286,13 +286,13 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No data is passed. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => UpdateRequest(request, data: null, name: null)); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext); // Assert Assert.False(modelBindingResult.Value.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs index bfe2ad5b25..a5dd00d5ef 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/GenericModelBinderIntegrationTest.cs @@ -34,15 +34,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the GenericModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.index=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -72,15 +72,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; // Need to have a key here so that the GenericModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?index=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -111,15 +111,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Without a key here so the GenericModelBinder will not recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -205,13 +205,13 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the GenericModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.QueryString = new QueryString("?parameter.index=0")); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -239,13 +239,13 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the GenericModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.QueryString = new QueryString("?parameter.index=0")); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -272,15 +272,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0][0].Key=key0¶meter[0][0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -317,15 +317,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0][0].Key=key0&[0][0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -362,15 +362,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary[]) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -397,15 +397,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Key=key0¶meter[0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -441,15 +441,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0].Key=key0&[0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -485,15 +485,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ICollection>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -520,16 +520,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString( "?parameter[0].Key=key0¶meter[0].Value[0]=10¶meter[0].Value[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -569,15 +569,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?[0].Key=key0&[0].Value[0]=10&[0].Value[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -617,15 +617,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Dictionary>) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs index 7d9b9b2eb4..40078013bd 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/HeaderModelBinderIntegrationTest.cs @@ -43,11 +43,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Do not add any headers. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -82,12 +82,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.Headers.Add("Header", new[] { "someValue" })); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -124,12 +124,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.Headers.Add("Header", new[] { "someValue" })); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -170,12 +170,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ListContainer1), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.Headers.Add("Header", new[] { "someValue" })); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var result = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -218,12 +218,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(ListContainer2), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => request.Headers.Add("Header", new[] { "someValue" })); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var result = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -280,14 +280,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; Action action = r => r.Headers.Add("CustomParameter", new[] { value }); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(action); + var testContext = ModelBindingTestHelper.GetTestContext(action); // Do not add any headers. - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs index 7f5007b583..9580eb1776 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/KeyValuePairModelBinderIntegrationTest.cs @@ -25,15 +25,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Key=key0¶meter.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -64,14 +64,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "parameter", ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.False(modelBindingResult.IsModelSet); @@ -110,14 +110,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "parameter", ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.False(modelBindingResult.IsModelSet); @@ -147,14 +147,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "parameter", ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Key=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.False(modelBindingResult.IsModelSet); @@ -194,14 +194,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Name = "parameter", ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Key=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.False(modelBindingResult.IsModelSet); @@ -236,15 +236,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -276,15 +276,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Key=key0&Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -316,15 +316,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -352,15 +352,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Key=key0¶meter.Value.Id=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -397,15 +397,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value.Id=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -438,15 +438,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Key=key0&Value.Id=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -479,15 +479,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(KeyValuePair) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestContext.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestContext.cs new file mode 100644 index 0000000000..2ae059bfd4 --- /dev/null +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestContext.cs @@ -0,0 +1,12 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Mvc.ModelBinding; + +namespace Microsoft.AspNetCore.Mvc.IntegrationTests +{ + public class ModelBindingTestContext : ControllerContext + { + public IModelMetadataProvider MetadataProvider { get; set; } + } +} diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestHelper.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestHelper.cs index 326643696e..5de1052a2c 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestHelper.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelBindingTestHelper.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.Controllers; @@ -18,7 +19,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests { public static class ModelBindingTestHelper { - public static OperationBindingContext GetOperationBindingContext( + public static ModelBindingTestContext GetTestContext( Action updateRequest = null, Action updateOptions = null, ControllerActionDescriptor actionDescriptor = null) @@ -26,21 +27,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var httpContext = GetHttpContext(updateRequest, updateOptions); var services = httpContext.RequestServices; - actionDescriptor = actionDescriptor ?? new ControllerActionDescriptor(); - - var actionContext = new ActionContext(httpContext, new RouteData(), actionDescriptor); - var controllerContext = GetControllerContext( - services.GetRequiredService>().Value, - actionContext); - - return new OperationBindingContext() + var context = new ModelBindingTestContext() { - ActionContext = controllerContext, - InputFormatters = controllerContext.InputFormatters, + ActionDescriptor = actionDescriptor ?? new ControllerActionDescriptor(), + HttpContext = httpContext, MetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(), - ValidatorProvider = new CompositeModelValidatorProvider(controllerContext.ValidatorProviders), - ValueProvider = new CompositeValueProvider(controllerContext.ValueProviders), + RouteData = new RouteData(), }; + + var options = services.GetRequiredService>(); + var valueProviderFactoryContext = new ValueProviderFactoryContext(context); + foreach (var factory in options.Value.ValueProviderFactories) + { + factory.CreateValueProviderAsync(valueProviderFactoryContext).GetAwaiter().GetResult(); + } + + context.ValueProviders = valueProviderFactoryContext.ValueProviders; + + return context; } public static ControllerArgumentBinder GetArgumentBinder( @@ -74,12 +78,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests return new ControllerArgumentBinder( metadataProvider, new ModelBinderFactory(metadataProvider, options), - GetObjectValidator(metadataProvider)); + GetObjectValidator(metadataProvider, options)); } - public static IObjectModelValidator GetObjectValidator(IModelMetadataProvider metadataProvider) + public static IObjectModelValidator GetObjectValidator( + IModelMetadataProvider metadataProvider, + IOptions options = null) { - return new DefaultObjectValidator(metadataProvider, new ValidatorCache()); + IList validatorProviders; + if (options == null) + { + validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders; + } + else + { + validatorProviders = options.Value.ModelValidatorProviders; + } + + return new DefaultObjectValidator(metadataProvider, validatorProviders); } private static HttpContext GetHttpContext( @@ -124,8 +140,6 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests return new ControllerContext(context) { - InputFormatters = options.InputFormatters, - ValidatorProviders = options.ModelValidatorProviders, ValueProviders = valueProviderFactoryContext.ValueProviders }; } diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelPrefixSelectionIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelPrefixSelectionIntegrationTest.cs index ec4b04f05b..03de807248 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelPrefixSelectionIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ModelPrefixSelectionIntegrationTest.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person1), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // This will cause selection of the "parameter" prefix. request.QueryString = new QueryString("?parameter="); @@ -44,10 +44,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -82,7 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // This will cause selection of the "parameter" prefix. request.QueryString = new QueryString("?parameter="); @@ -94,10 +94,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -128,16 +128,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person3), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // This can't be used because of [FromForm] on the property. request.QueryString = new QueryString("?Name="); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -172,7 +172,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // This will only match empty prefix, but can't be used because of [FromForm] on the property. request.QueryString = new QueryString("?Name="); @@ -184,10 +184,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -222,7 +222,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // This value won't be used to select a prefix, because we're only looking at the query string. request.Form = new FormCollection(new Dictionary() @@ -231,10 +231,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs index ce74985bc3..084de6b4a5 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/MutableObjectModelBinderIntegrationTest.cs @@ -57,16 +57,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); SetJsonBodyContent(request, AddressBodyContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -98,16 +98,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Customer.Name=bill"); SetJsonBodyContent(request, AddressBodyContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -139,16 +139,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); request.ContentType = "application/json"; }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -181,16 +181,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.ProductId=10"); SetJsonBodyContent(request, AddressBodyContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -222,16 +222,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); SetJsonBodyContent(request, AddressBodyContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -270,16 +270,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill¶meter.Customer.Token=" + ByteArrayEncoded); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -314,15 +314,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Customer.Name=bill&Customer.Token=" + ByteArrayEncoded); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -357,15 +357,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -410,16 +410,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -454,16 +454,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Customer.Name=bill"); SetFormFileBodyContent(request, "Hello, World!", "Customer.Documents"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -498,17 +498,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); // Deliberately leaving out any form data. }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -542,16 +542,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.ProductId=10"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -583,16 +583,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -624,16 +624,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill¶meter.ProductIds[0]=10¶meter.ProductIds[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -671,15 +671,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -717,15 +717,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -755,15 +755,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -796,16 +796,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill¶meter.ProductIds[0]=10¶meter.ProductIds[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -843,15 +843,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -889,15 +889,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -927,15 +927,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -968,16 +968,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill¶meter.ProductIds[0].Key=key0¶meter.ProductIds[0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1015,15 +1015,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Name=bill&ProductIds[0].Key=key0&ProductIds[0].Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1061,15 +1061,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1099,15 +1099,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1140,16 +1140,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill¶meter.ProductId.Key=key0¶meter.ProductId.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1187,15 +1187,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Name=bill&ProductId.Key=key0&ProductId.Value=10"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1233,15 +1233,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1271,15 +1271,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1318,16 +1318,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); SetJsonBodyContent(request, AddressBodyContent); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1366,12 +1366,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1412,12 +1412,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1461,15 +1461,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Id=123"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1506,15 +1506,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Customer.Id=123"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1555,15 +1555,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?customParameter.Customer.Id=123"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1606,15 +1606,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1649,15 +1649,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1688,15 +1688,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?ProductName=abc"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1731,15 +1731,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1774,15 +1774,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1813,15 +1813,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?OrderIds[0]=123"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1857,15 +1857,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.ProductId="); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1901,15 +1901,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.ProductId"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs index c5549acdb2..3df01bd19d 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ServicesModelBinderIntegrationTest.cs @@ -31,11 +31,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(JsonOutputFormatter) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -68,11 +68,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(JsonOutputFormatter), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -104,11 +104,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(IEnumerable), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -140,11 +140,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(IEnumerable), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -176,11 +176,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(IActionResult), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); // Act & Assert var exception = await Assert.ThrowsAsync( - () => argumentBinder.BindModelAsync(parameter, operationContext)); + () => argumentBinder.BindModelAsync(parameter, testContext)); Assert.Contains(typeof(IActionResult).FullName, exception.Message); } } diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs index f5bcf3e368..2ae49f3d0e 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/SimpleTypeModelBinderIntegrationTest.cs @@ -32,15 +32,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("CustomParameter.Address.Zip", "1"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -76,15 +76,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address.Zip", "1"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -121,15 +121,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(string) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", "someValue"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -165,15 +165,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(string) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Parameter1=someValue&Parameter1=otherValue"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -209,15 +209,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(int) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", "abcd"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -267,15 +267,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = parameterType }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", "abcd"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -317,14 +317,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = parameterType }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", ""); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -369,14 +369,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = parameterType }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", string.Empty); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert // ModelBindingResult @@ -412,14 +412,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = parameterType }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Parameter1", string.Empty); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -452,12 +452,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // No Data. - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert @@ -504,14 +504,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Person), }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.Form = new FormCollection(personStore); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs index ab70dd0b99..759807990b 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryUpdateModelIntegrationTest.cs @@ -27,12 +27,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ExistingModel_EmptyPrefix_OverwritesBoundValues() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Address { Street = "DefaultStreet", @@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var oldModel = model; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -67,16 +67,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Address(); // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_TopLevelCollection_EmptyPrefix_BindsAfterClearing() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create(new Dictionary { @@ -117,7 +117,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new List { new Person1 @@ -134,7 +134,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -166,12 +166,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NestedPoco_EmptyPrefix_DoesNotTrounceUnboundValues() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address.Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person1 { Name = "Joe", @@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var oldModel = model; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -216,16 +216,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_CreatesCollection() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person2(); // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -252,12 +252,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_MaintainsCollectionIfNonNull() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person2 { Address = new List
(), @@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var collection = model.Address; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -303,12 +303,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NonSettableCollectionModel_EmptyPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person3 { Address = @@ -327,7 +327,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -358,16 +358,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ReadOnlyCollectionModel_EmptyPrefix_DoesNotGetBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person6(); // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -397,16 +397,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_CreatesArray() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person4(); // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -433,12 +433,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_OverwritesArray() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person4 { Address = new Address[] @@ -453,7 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var collection = model.Address; // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -486,16 +486,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NonSettableArrayModel_EmptyPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person5(); // Act - var result = await TryUpdateModel(model, string.Empty, operationContext); + var result = await TryUpdateModel(model, string.Empty, testContext); // Assert Assert.True(result); @@ -516,12 +516,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ExistingModel_WithPrefix_ValuesGetOverwritten() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Address { Street = "DefaultStreet", @@ -530,7 +530,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var oldModel = model; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -556,16 +556,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Address(); // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -590,7 +590,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_TopLevelCollection_WithPrefix_BindsAfterClearing() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create(new Dictionary { @@ -599,7 +599,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new List { new Person1 @@ -616,7 +616,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -648,12 +648,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NestedPoco_WithPrefix_DoesNotTrounceUnboundValues() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address.Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person1 { Name = "Joe", @@ -666,7 +666,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var oldModel = model; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -693,16 +693,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_CreatesCollection() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person2(); // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -729,12 +729,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_MaintainsCollectionIfNonNull() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person2 { Address = new List
(), @@ -742,7 +742,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var collection = model.Address; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -770,12 +770,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NonSettableCollectionModel_WithPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person3 { Address = @@ -794,7 +794,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -820,16 +820,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person6(); // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -854,16 +854,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableArrayModel_WithPrefix_CreatesArray() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person4(); // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -890,12 +890,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_SettableArrayModel_WithPrefix_OverwritesArray() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person4 { Address = new Address[] @@ -910,7 +910,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests var collection = model.Address; // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -938,16 +938,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public async Task TryUpdateModel_NonSettableArrayModel_WithPrefix_GetsBound() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new Person5(); // Act - var result = await TryUpdateModel(model, "prefix", operationContext); + var result = await TryUpdateModel(model, "prefix", testContext); // Assert Assert.True(result); @@ -968,9 +968,9 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests { // Arrange var data = "some data"; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => UpdateRequest(request, data, "files")); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new List { new FormFile(new MemoryStream(), baseStreamOffset: 0, length: 0, name: "file", fileName: "file1"), @@ -979,7 +979,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; // Act - var result = await TryUpdateModel(model, prefix: "files", operationContext: operationContext); + var result = await TryUpdateModel(model, prefix: "files", testContext: testContext); // Assert Assert.True(result); @@ -1088,19 +1088,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests private Task TryUpdateModel( object model, string prefix, - OperationBindingContext operationContext) + ModelBindingTestContext testContext) { return ModelBindingHelper.TryUpdateModelAsync( model, model.GetType(), prefix, - operationContext.ActionContext, - operationContext.MetadataProvider, + testContext, + testContext.MetadataProvider, TestModelBinderFactory.CreateDefault(), - operationContext.ValueProvider, - operationContext.InputFormatters, - ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider), - operationContext.ValidatorProvider); + new CompositeValueProvider(testContext.ValueProviders), + ModelBindingTestHelper.GetObjectValidator(testContext.MetadataProvider)); } } } \ No newline at end of file diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryValidateModelIntegrationTest.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryValidateModelIntegrationTest.cs index 4edceea2df..4be21f1089 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryValidateModelIntegrationTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/TryValidateModelIntegrationTest.cs @@ -6,6 +6,8 @@ using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Testing; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using Xunit; namespace Microsoft.AspNetCore.Mvc.IntegrationTests @@ -16,9 +18,9 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public void ModelState_IsInvalid_ForInvalidData_OnDerivedModel() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; var model = new SoftwareViewModel { Category = "Technology", @@ -29,14 +31,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Price = 110, Version = "2" }; - var oldModel = model; + + var controller = CreateController(testContext, testContext.MetadataProvider); // Act - var result = TryValidateModel(model, "software", operationContext); + var result = controller.TryValidateModel(model, prefix: "software"); // Assert Assert.False(result); - Assert.Same(oldModel, model); Assert.False(modelState.IsValid); var modelStateErrors = GetModelStateErrors(modelState); Assert.Single(modelStateErrors); @@ -47,8 +49,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public void ModelState_IsValid_ForValidData_OnDerivedModel() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; var model = new SoftwareViewModel { Category = "Technology", @@ -60,14 +62,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Price = 110, Version = "2" }; - var oldModel = model; + + var controller = CreateController(testContext, testContext.MetadataProvider); // Act - var result = TryValidateModel(model, prefix: string.Empty, operationContext: operationContext); + var result = controller.TryValidateModel(model); // Assert Assert.True(result); - Assert.Same(oldModel, model); Assert.True(modelState.IsValid); var modelStateErrors = GetModelStateErrors(modelState); Assert.Empty(modelStateErrors); @@ -77,8 +79,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests public void TryValidateModel_CollectionsModel_ReturnsErrorsForInvalidProperties() { // Arrange - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); - var modelState = operationContext.ActionContext.ModelState; + var testContext = ModelBindingTestHelper.GetTestContext(); + var modelState = testContext.ModelState; var model = new List(); model.Add(new ProductViewModel() { @@ -102,10 +104,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests Detail3 = "d3" } }); - var oldModel = model; + + var controller = CreateController(testContext, testContext.MetadataProvider); // Act - var result = TryValidateModel(model, prefix: string.Empty, operationContext: operationContext); + var result = controller.TryValidateModel(model); // Assert Assert.False(result); @@ -133,18 +136,18 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests modelStateErrors["[1].Contact"]); } - private bool TryValidateModel( - object model, - string prefix, - OperationBindingContext operationContext) + private TestController CreateController( + ActionContext actionContext, + IModelMetadataProvider metadataProvider) { - var controller = new TestController(); - controller.ControllerContext = new ControllerContext(operationContext.ActionContext); - controller.ObjectValidator = ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider); - controller.MetadataProvider = operationContext.MetadataProvider; - controller.ControllerContext.ValidatorProviders = new[] { operationContext.ValidatorProvider }.ToList(); + var options = actionContext.HttpContext.RequestServices.GetRequiredService>(); - return controller.TryValidateModel(model, prefix); + var controller = new TestController(); + controller.ControllerContext = new ControllerContext(actionContext); + controller.ObjectValidator = ModelBindingTestHelper.GetObjectValidator(metadataProvider, options); + controller.MetadataProvider = metadataProvider; + + return controller; } private void AssertErrorEquals(string expected, string actual) diff --git a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ValidationIntegrationTests.cs b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ValidationIntegrationTests.cs index 1ad31ee347..c63f1ade96 100644 --- a/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ValidationIntegrationTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.IntegrationTests/ValidationIntegrationTests.cs @@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = new QueryString("?accountId=30"); @@ -99,11 +99,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, actionDescriptor: actionDescriptor); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var arguments = await argumentBinder.BindActionArgumentsAsync( - (ControllerContext)operationContext.ActionContext, new TestController()); + var arguments = await argumentBinder.BindActionArgumentsAsync(testContext, new TestController()); // Assert Assert.False(modelState.IsValid); @@ -130,7 +129,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }; var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = new QueryString("?accountId=10"); @@ -139,11 +138,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }, actionDescriptor: actionDescriptor); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var arguments = await argumentBinder.BindActionArgumentsAsync( - (ControllerContext)operationContext.ActionContext, new TestController()); + var arguments = await argumentBinder.BindActionArgumentsAsync(testContext, new TestController()); // Assert Assert.True(modelState.IsValid); @@ -175,15 +173,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order1) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.CustomerName=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -212,15 +210,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order1) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -263,15 +261,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order2) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -301,15 +299,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order2) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -354,15 +352,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order3) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -392,16 +390,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order3) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // Force creation of the Customer model. request.QueryString = new QueryString("?parameter.Customer.Age=17"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -446,15 +444,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Items[0].ItemId=17"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -484,16 +482,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order4) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // Force creation of the Customer model. request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -533,15 +531,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].ProductId=17"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -570,16 +568,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { // Force creation of the Customer model. request.QueryString = new QueryString("?parameter[0].Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -619,15 +617,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order6) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -656,15 +654,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order6) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Name=billybob"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -707,15 +705,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order7) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -744,15 +742,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order7) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=billybob"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -784,15 +782,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order7) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -842,15 +840,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order8) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -879,15 +877,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order8) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Customer.Name=billybob"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -949,15 +947,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order9) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Products[0].Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -986,15 +984,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Order9) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter.Products[0].Name=billybob"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1037,15 +1035,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Name=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1074,15 +1072,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?parameter[0].Name=billybob"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1114,15 +1112,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(List) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1154,15 +1152,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(User) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Id=bill"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1194,15 +1192,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(User) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => + var testContext = ModelBindingTestHelper.GetTestContext(request => { request.QueryString = new QueryString("?Zip=-123"); }); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1262,7 +1260,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests MvcOptions testOptions = null; var input = "{\"Zip\":\"47\"}"; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.QueryString = @@ -1277,10 +1275,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests }); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(testOptions); - var modelState = operationContext.ActionContext.ModelState; + var modelState = testContext.ModelState; // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext); Assert.Equal(3, modelState.Count); Assert.Equal(0, modelState.ErrorCount); @@ -1318,22 +1316,22 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(JToken) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }")); request.ContentType = "application/json"; }); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // We need to add another model state entry which should get marked as skipped so // we can prove that the JObject was skipped. modelState.SetModelValue("CustomParameter.message", "Hello", "Hello"); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1367,16 +1365,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(CancellationToken) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); + var testContext = ModelBindingTestHelper.GetTestContext(); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // We need to add another model state entry - we want this to be ignored. modelState.SetModelValue("message", "Hello", "Hello"); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1407,21 +1405,21 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Greeting) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }")); request.ContentType = "application/json"; }); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // We need to add another model state entry which should not get changed. modelState.SetModelValue("other.key", "1", "1"); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); @@ -1453,7 +1451,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests ParameterType = typeof(Greeting) }; - var operationContext = ModelBindingTestHelper.GetOperationBindingContext( + var testContext = ModelBindingTestHelper.GetTestContext( request => { // This string is too long and will have a validation error. @@ -1461,14 +1459,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests request.ContentType = "application/json"; }); - var httpContext = operationContext.HttpContext; - var modelState = operationContext.ActionContext.ModelState; + var httpContext = testContext.HttpContext; + var modelState = testContext.ModelState; // We need to add another model state entry which should not get changed. modelState.SetModelValue("other.key", "1", "1"); // Act - var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); + var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult); // Assert Assert.True(modelBindingResult.IsModelSet); diff --git a/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelValidatorProvider.cs b/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelValidatorProvider.cs index f3852a3506..9e9d77dd1d 100644 --- a/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelValidatorProvider.cs +++ b/test/Microsoft.AspNetCore.Mvc.TestCommon/TestModelValidatorProvider.cs @@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation internal class TestModelValidatorProvider : CompositeModelValidatorProvider { // Creates a provider with all the defaults - includes data annotations - public static IModelValidatorProvider CreateDefaultProvider() + public static CompositeModelValidatorProvider CreateDefaultProvider() { var providers = new IModelValidatorProvider[] { diff --git a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ControllerTest.cs b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ControllerTest.cs index 25430e8bee..2259d500f6 100644 --- a/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ControllerTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.ViewFeatures.Test/ControllerTest.cs @@ -279,24 +279,25 @@ namespace Microsoft.AspNetCore.Mvc.Test var viewData = new ViewDataDictionary(metadataProvider, new ModelStateDictionary()); var tempData = new TempDataDictionary(httpContext, Mock.Of()); + var valiatorProviders = new[] + { + new DataAnnotationsModelValidatorProvider( + new ValidationAttributeAdapterProvider(), + new TestOptionsManager(), + stringLocalizerFactory: null), + }; + var controllerContext = new ControllerContext() { HttpContext = httpContext, ValueProviders = new[] { valueProvider, }, - ValidatorProviders = new[] - { - new DataAnnotationsModelValidatorProvider( - new ValidationAttributeAdapterProvider(), - new TestOptionsManager(), - stringLocalizerFactory: null), - }, }; var controller = new TestableController() { ControllerContext = controllerContext, MetadataProvider = metadataProvider, - ObjectValidator = new DefaultObjectValidator(metadataProvider, new ValidatorCache()), + ObjectValidator = new DefaultObjectValidator(metadataProvider, valiatorProviders), TempData = tempData, ViewData = viewData, }; diff --git a/test/Microsoft.AspNetCore.Mvc.WebApiCompatShimTest/HttpRequestMessage/HttpRequestMessageModelBinderTest.cs b/test/Microsoft.AspNetCore.Mvc.WebApiCompatShimTest/HttpRequestMessage/HttpRequestMessageModelBinderTest.cs index ec76fe9bf5..d9b1e9eb21 100644 --- a/test/Microsoft.AspNetCore.Mvc.WebApiCompatShimTest/HttpRequestMessage/HttpRequestMessageModelBinderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.WebApiCompatShimTest/HttpRequestMessage/HttpRequestMessageModelBinderTest.cs @@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim // Arrange var binder = new HttpRequestMessageModelBinder(); var bindingContext = GetBindingContext(typeof(HttpRequestMessage)); - var expectedModel = bindingContext.OperationBindingContext.HttpContext.GetHttpRequestMessage(); + var expectedModel = bindingContext.HttpContext.GetHttpRequestMessage(); // Act await binder.BindModelAsync(bindingContext); @@ -42,20 +42,16 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim var metadataProvider = new EmptyModelMetadataProvider(); DefaultModelBindingContext bindingContext = new DefaultModelBindingContext { + ActionContext = new ActionContext() + { + HttpContext = new DefaultHttpContext(), + }, ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelName = "someName", - OperationBindingContext = new OperationBindingContext - { - ActionContext = new ActionContext() - { - HttpContext = new DefaultHttpContext(), - }, - MetadataProvider = metadataProvider, - }, ValidationState = new ValidationStateDictionary(), }; - bindingContext.OperationBindingContext.HttpContext.Request.Method = "GET"; + bindingContext.HttpContext.Request.Method = "GET"; return bindingContext; }