Remove OperationBindingContext

This change trims a few concepts that aren't really needed inside
ModelBinders anymore, and removes the OperationBindingContext class.
This commit is contained in:
Ryan Nowak 2016-03-30 17:27:59 -07:00
parent 4e8e30437f
commit 756cd2dab8
76 changed files with 1346 additions and 1761 deletions

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc.ModelBinding namespace Microsoft.AspNetCore.Mvc.ModelBinding
@ -11,6 +12,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary> /// </summary>
public abstract class ModelBindingContext public abstract class ModelBindingContext
{ {
/// <summary>
/// Represents the <see cref="Mvc.ActionContext"/> associated with this context.
/// </summary>
/// <remarks>
/// The property setter is provided for unit testing purposes only.
/// </remarks>
public abstract ActionContext ActionContext { get; set; }
/// <summary> /// <summary>
/// Gets or sets a model name which is explicitly set using an <see cref="IModelNameProvider"/>. /// Gets or sets a model name which is explicitly set using an <see cref="IModelNameProvider"/>.
/// </summary> /// </summary>
@ -27,6 +36,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary> /// </summary>
public abstract string FieldName { get; set; } public abstract string FieldName { get; set; }
/// <summary>
/// Gets the <see cref="Http.HttpContext"/> associated with this context.
/// </summary>
public virtual HttpContext HttpContext => ActionContext?.HttpContext;
/// <summary> /// <summary>
/// Gets or sets an indication that the current binder is handling the top-level object. /// Gets or sets an indication that the current binder is handling the top-level object.
/// </summary> /// </summary>
@ -57,6 +71,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// Gets or sets the <see cref="ModelStateDictionary"/> used to capture <see cref="ModelState"/> values /// Gets or sets the <see cref="ModelStateDictionary"/> used to capture <see cref="ModelState"/> values
/// for properties in the object graph of the model when binding. /// for properties in the object graph of the model when binding.
/// </summary> /// </summary>
/// <remarks>
/// The property setter is provided for unit testing purposes only.
/// </remarks>
public abstract ModelStateDictionary ModelState { get; set; } public abstract ModelStateDictionary ModelState { get; set; }
/// <summary> /// <summary>
@ -65,12 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <remarks> /// <remarks>
/// The <see cref="ModelMetadata"/> property must be set to access this property. /// The <see cref="ModelMetadata"/> property must be set to access this property.
/// </remarks> /// </remarks>
public abstract Type ModelType { get; } public virtual Type ModelType => ModelMetadata.ModelType;
/// <summary>
/// Represents the <see cref="ModelBinding.OperationBindingContext"/> associated with this context.
/// </summary>
public abstract OperationBindingContext OperationBindingContext { get; set; }
/// <summary> /// <summary>
/// Gets or sets a predicate which will be evaluated for each property to determine if the property /// 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 <see cref="ValidationStateDictionary"/>. Used for tracking validation state to /// Gets or sets the <see cref="ValidationStateDictionary"/>. Used for tracking validation state to
/// customize validation behavior for a model object. /// customize validation behavior for a model object.
/// </summary> /// </summary>
/// <remarks>
/// The property setter is provided for unit testing purposes only.
/// </remarks>
public abstract ValidationStateDictionary ValidationState { get; set; } public abstract ValidationStateDictionary ValidationState { get; set; }
/// <summary> /// <summary>

View File

@ -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
{
/// <summary>
/// A context that contains information specific to the current request and the action whose parameters
/// are being model bound.
/// </summary>
public class OperationBindingContext
{
/// <summary>
/// Gets or sets the <see cref="Mvc.ActionContext"/> for the current request.
/// </summary>
public ActionContext ActionContext { get; set; }
/// <summary>
/// Gets the <see cref="Http.HttpContext"/> for the current request.
/// </summary>
public HttpContext HttpContext => ActionContext.HttpContext;
/// <summary>
/// Gets or sets the set of <see cref="IInputFormatter"/> instances associated with this context.
/// </summary>
public IList<IInputFormatter> InputFormatters { get; set; }
/// <summary>
/// Gets unaltered value provider collection.
/// Value providers can be filtered by specific model binders.
/// </summary>
public IValueProvider ValueProvider { get; set; }
/// <summary>
/// Gets or sets the <see cref="IModelMetadataProvider"/> associated with this context.
/// </summary>
public IModelMetadataProvider MetadataProvider { get; set; }
/// <summary>
/// Gets or sets the <see cref="IModelValidatorProvider"/> instance used for model validation with this
/// context.
/// </summary>
public IModelValidatorProvider ValidatorProvider { get; set; }
}
}

View File

@ -1121,9 +1121,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
valueProvider, valueProvider,
ControllerContext.InputFormatters, ObjectValidator);
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders));
} }
/// <summary> /// <summary>
@ -1161,9 +1159,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders), new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters,
ObjectValidator, ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
includeExpressions); includeExpressions);
} }
@ -1201,9 +1197,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders), new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters,
ObjectValidator, ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter); propertyFilter);
} }
@ -1249,9 +1243,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
valueProvider, valueProvider,
ControllerContext.InputFormatters,
ObjectValidator, ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
includeExpressions); includeExpressions);
} }
@ -1296,9 +1288,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
valueProvider, valueProvider,
ControllerContext.InputFormatters,
ObjectValidator, ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter); propertyFilter);
} }
@ -1335,9 +1325,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders), new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters, ObjectValidator);
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders));
} }
/// <summary> /// <summary>
@ -1387,9 +1375,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider, MetadataProvider,
ModelBinderFactory, ModelBinderFactory,
valueProvider, valueProvider,
ControllerContext.InputFormatters,
ObjectValidator, ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter); propertyFilter);
} }
@ -1429,7 +1415,6 @@ namespace Microsoft.AspNetCore.Mvc
ObjectValidator.Validate( ObjectValidator.Validate(
ControllerContext, ControllerContext,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
validationState: null, validationState: null,
prefix: prefix ?? string.Empty, prefix: prefix ?? string.Empty,
model: model); model: model);

View File

@ -5,9 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Core; using Microsoft.AspNetCore.Mvc.Core;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc namespace Microsoft.AspNetCore.Mvc
{ {
@ -16,8 +14,6 @@ namespace Microsoft.AspNetCore.Mvc
/// </summary> /// </summary>
public class ControllerContext : ActionContext public class ControllerContext : ActionContext
{ {
private FormatterCollection<IInputFormatter> _inputFormatters;
private IList<IModelValidatorProvider> _validatorProviders;
private IList<IValueProvider> _valueProviders; private IList<IValueProvider> _valueProviders;
/// <summary> /// <summary>
@ -55,56 +51,6 @@ namespace Microsoft.AspNetCore.Mvc
set { base.ActionDescriptor = value; } set { base.ActionDescriptor = value; }
} }
/// <summary>
/// Gets or sets the list of <see cref="IInputFormatter"/> instances for the current request.
/// </summary>
public virtual FormatterCollection<IInputFormatter> InputFormatters
{
get
{
if (_inputFormatters == null)
{
_inputFormatters = new FormatterCollection<IInputFormatter>();
}
return _inputFormatters;
}
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_inputFormatters = value;
}
}
/// <summary>
/// Gets or sets the list of <see cref="IModelValidatorProvider"/> instances for the current request.
/// </summary>
public virtual IList<IModelValidatorProvider> ValidatorProviders
{
get
{
if (_validatorProviders == null)
{
_validatorProviders = new List<IModelValidatorProvider>();
}
return _validatorProviders;
}
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_validatorProviders = value;
}
}
/// <summary> /// <summary>
/// Gets or sets the list of <see cref="IValueProvider"/> instances for the current request. /// Gets or sets the list of <see cref="IValueProvider"/> instances for the current request.
/// </summary> /// </summary>

View File

@ -178,18 +178,22 @@ namespace Microsoft.Extensions.DependencyInjection
ServiceDescriptor.Singleton<IFilterProvider, DefaultFilterProvider>()); ServiceDescriptor.Singleton<IFilterProvider, DefaultFilterProvider>());
// //
// ModelBinding, Validation and Formatting // ModelBinding, Validation
// //
// The DefaultModelMetadataProvider does significant caching and should be a singleton. // The DefaultModelMetadataProvider does significant caching and should be a singleton.
services.TryAddSingleton<IModelMetadataProvider, DefaultModelMetadataProvider>(); services.TryAddSingleton<IModelMetadataProvider, DefaultModelMetadataProvider>();
services.TryAdd(ServiceDescriptor.Transient<ICompositeMetadataDetailsProvider>(serviceProvider => services.TryAdd(ServiceDescriptor.Transient<ICompositeMetadataDetailsProvider>(s =>
{ {
var options = serviceProvider.GetRequiredService<IOptions<MvcOptions>>().Value; var options = s.GetRequiredService<IOptions<MvcOptions>>().Value;
return new DefaultCompositeMetadataDetailsProvider(options.ModelMetadataDetailsProviders); return new DefaultCompositeMetadataDetailsProvider(options.ModelMetadataDetailsProviders);
})); }));
services.TryAddSingleton<IModelBinderFactory, ModelBinderFactory>(); services.TryAddSingleton<IModelBinderFactory, ModelBinderFactory>();
services.TryAddSingleton<IObjectModelValidator, DefaultObjectValidator>(); services.TryAddSingleton<IObjectModelValidator>(s =>
services.TryAddSingleton<ValidatorCache>(); {
var options = s.GetRequiredService<IOptions<MvcOptions>>().Value;
var metadataProvider = s.GetRequiredService<IModelMetadataProvider>();
return new DefaultObjectValidator(metadataProvider, options.ModelValidatorProviders);
});
services.TryAddSingleton<ClientValidatorCache>(); services.TryAddSingleton<ClientValidatorCache>();
// //

View File

@ -13,7 +13,6 @@ using Microsoft.AspNetCore.Mvc.Core;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.Extensions.Internal; using Microsoft.Extensions.Internal;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -32,7 +31,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
ControllerActionDescriptor descriptor, ControllerActionDescriptor descriptor,
IReadOnlyList<IInputFormatter> inputFormatters, IReadOnlyList<IInputFormatter> inputFormatters,
IControllerActionArgumentBinder argumentBinder, IControllerActionArgumentBinder argumentBinder,
IReadOnlyList<IModelValidatorProvider> modelValidatorProviders,
IReadOnlyList<IValueProviderFactory> valueProviderFactories, IReadOnlyList<IValueProviderFactory> valueProviderFactories,
ILogger logger, ILogger logger,
DiagnosticSource diagnosticSource, DiagnosticSource diagnosticSource,
@ -41,7 +39,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
actionContext, actionContext,
controllerActionInvokerCache, controllerActionInvokerCache,
inputFormatters, inputFormatters,
modelValidatorProviders,
valueProviderFactories, valueProviderFactories,
logger, logger,
diagnosticSource, diagnosticSource,

View File

@ -21,7 +21,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
private readonly IControllerFactory _controllerFactory; private readonly IControllerFactory _controllerFactory;
private readonly ControllerActionInvokerCache _controllerActionInvokerCache; private readonly ControllerActionInvokerCache _controllerActionInvokerCache;
private readonly IReadOnlyList<IInputFormatter> _inputFormatters; private readonly IReadOnlyList<IInputFormatter> _inputFormatters;
private readonly IReadOnlyList<IModelValidatorProvider> _modelValidatorProviders;
private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories; private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories;
private readonly int _maxModelValidationErrors; private readonly int _maxModelValidationErrors;
private readonly ILogger _logger; private readonly ILogger _logger;
@ -39,7 +38,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
_controllerActionInvokerCache = controllerActionInvokerCache; _controllerActionInvokerCache = controllerActionInvokerCache;
_argumentBinder = argumentBinder; _argumentBinder = argumentBinder;
_inputFormatters = optionsAccessor.Value.InputFormatters.ToArray(); _inputFormatters = optionsAccessor.Value.InputFormatters.ToArray();
_modelValidatorProviders = optionsAccessor.Value.ModelValidatorProviders.ToArray();
_valueProviderFactories = optionsAccessor.Value.ValueProviderFactories.ToArray(); _valueProviderFactories = optionsAccessor.Value.ValueProviderFactories.ToArray();
_maxModelValidationErrors = optionsAccessor.Value.MaxModelValidationErrors; _maxModelValidationErrors = optionsAccessor.Value.MaxModelValidationErrors;
_logger = loggerFactory.CreateLogger<ControllerActionInvoker>(); _logger = loggerFactory.CreateLogger<ControllerActionInvoker>();
@ -70,7 +68,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
actionDescriptor, actionDescriptor,
_inputFormatters, _inputFormatters,
_argumentBinder, _argumentBinder,
_modelValidatorProviders,
_valueProviderFactories, _valueProviderFactories,
_logger, _logger,
_diagnosticSource, _diagnosticSource,

View File

@ -39,12 +39,12 @@ namespace Microsoft.AspNetCore.Mvc.Internal
} }
public Task<IDictionary<string, object>> BindActionArgumentsAsync( public Task<IDictionary<string, object>> BindActionArgumentsAsync(
ControllerContext context, ControllerContext controllerContext,
object controller) object controller)
{ {
if (context == null) if (controllerContext == null)
{ {
throw new ArgumentNullException(nameof(context)); throw new ArgumentNullException(nameof(controllerContext));
} }
if (controller == null) if (controller == null)
@ -52,7 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
throw new ArgumentNullException(nameof(controller)); throw new ArgumentNullException(nameof(controller));
} }
if (context.ActionDescriptor == null) if (controllerContext.ActionDescriptor == null)
{ {
throw new ArgumentException(Resources.FormatPropertyOfTypeCannotBeNull( throw new ArgumentException(Resources.FormatPropertyOfTypeCannotBeNull(
nameof(ControllerContext.ActionDescriptor), 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 // Perf: Avoid allocating async state machines where possible. We only need the state
// machine if you need to bind properties. // machine if you need to bind properties.
var actionDescriptor = context.ActionDescriptor; var actionDescriptor = controllerContext.ActionDescriptor;
if (actionDescriptor.BoundProperties.Count == 0 && if (actionDescriptor.BoundProperties.Count == 0 &&
actionDescriptor.Parameters.Count == 0) actionDescriptor.Parameters.Count == 0)
{ {
@ -70,53 +70,51 @@ namespace Microsoft.AspNetCore.Mvc.Internal
} }
else if (actionDescriptor.BoundProperties.Count == 0) else if (actionDescriptor.BoundProperties.Count == 0)
{ {
var operationBindingContext = GetOperationBindingContext(context); return PopulateArgumentsAsync(controllerContext, actionDescriptor.Parameters);
return PopulateArgumentsAsync(operationBindingContext, actionDescriptor.Parameters);
} }
else else
{ {
return BindActionArgumentsAndPropertiesCoreAsync( return BindActionArgumentsAndPropertiesCoreAsync(
context, controllerContext,
controller, controller,
actionDescriptor); actionDescriptor);
} }
} }
private async Task<IDictionary<string, object>> BindActionArgumentsAndPropertiesCoreAsync( private async Task<IDictionary<string, object>> BindActionArgumentsAndPropertiesCoreAsync(
ControllerContext context, ControllerContext controllerContext,
object controller, object controller,
ControllerActionDescriptor actionDescriptor) ControllerActionDescriptor actionDescriptor)
{ {
var operationBindingContext = GetOperationBindingContext(context);
var controllerProperties = await PopulateArgumentsAsync( var controllerProperties = await PopulateArgumentsAsync(
operationBindingContext, controllerContext,
actionDescriptor.BoundProperties); actionDescriptor.BoundProperties);
ActivateProperties(actionDescriptor, controller, controllerProperties); ActivateProperties(actionDescriptor, controller, controllerProperties);
var actionArguments = await PopulateArgumentsAsync( var actionArguments = await PopulateArgumentsAsync(
operationBindingContext, controllerContext,
actionDescriptor.Parameters); actionDescriptor.Parameters);
return actionArguments; return actionArguments;
} }
public async Task<ModelBindingResult?> BindModelAsync( public async Task<ModelBindingResult?> BindModelAsync(
ParameterDescriptor parameter, ParameterDescriptor parameter,
OperationBindingContext operationContext) ControllerContext controllerContext)
{ {
if (parameter == null) if (parameter == null)
{ {
throw new ArgumentNullException(nameof(parameter)); 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 metadata = _modelMetadataProvider.GetMetadataForType(parameter.ParameterType);
var modelBindingContext = DefaultModelBindingContext.CreateBindingContext( var modelBindingContext = DefaultModelBindingContext.CreateBindingContext(
operationContext, controllerContext,
new CompositeValueProvider(controllerContext.ValueProviders),
metadata, metadata,
parameter.BindingInfo, parameter.BindingInfo,
parameter.Name); parameter.Name);
@ -150,8 +148,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) if (modelBindingResult != null && modelBindingResult.Value.IsModelSet)
{ {
_validator.Validate( _validator.Validate(
operationContext.ActionContext, controllerContext,
operationContext.ValidatorProvider,
modelBindingContext.ValidationState, modelBindingContext.ValidationState,
modelBindingResult.Value.Key, modelBindingResult.Value.Key,
modelBindingResult.Value.Model); modelBindingResult.Value.Model);
@ -243,16 +240,16 @@ namespace Microsoft.AspNetCore.Mvc.Internal
} }
private async Task<IDictionary<string, object>> PopulateArgumentsAsync( private async Task<IDictionary<string, object>> PopulateArgumentsAsync(
OperationBindingContext operationContext, ControllerContext controllerContext,
IList<ParameterDescriptor> parameterMetadata) IList<ParameterDescriptor> parameters)
{ {
var arguments = new Dictionary<string, object>(StringComparer.Ordinal); var arguments = new Dictionary<string, object>(StringComparer.Ordinal);
// Perf: Avoid allocations // Perf: Avoid allocations
for (var i = 0; i < parameterMetadata.Count; i++) for (var i = 0; i < parameters.Count; i++)
{ {
var parameter = parameterMetadata[i]; var parameter = parameters[i];
var modelBindingResult = await BindModelAsync(parameter, operationContext); var modelBindingResult = await BindModelAsync(parameter, controllerContext);
if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) if (modelBindingResult != null && modelBindingResult.Value.IsModelSet)
{ {
arguments[parameter.Name] = modelBindingResult.Value.Model; arguments[parameter.Name] = modelBindingResult.Value.Model;
@ -261,17 +258,5 @@ namespace Microsoft.AspNetCore.Mvc.Internal
return arguments; 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),
};
}
} }
} }

View File

@ -12,7 +12,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary> /// </summary>
public class DefaultModelBindingContext : ModelBindingContext public class DefaultModelBindingContext : ModelBindingContext
{ {
private OperationBindingContext _operationBindingContext; private IValueProvider _originalValueProvider;
private ActionContext _actionContext;
private ModelStateDictionary _modelState;
private ValidationStateDictionary _validationState;
private State _state; private State _state;
private readonly Stack<State> _stack = new Stack<State>(); private readonly Stack<State> _stack = new Stack<State>();
@ -24,138 +27,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
{ {
} }
/// <summary>
/// Creates a new <see cref="DefaultModelBindingContext"/> for top-level model binding operation.
/// </summary>
/// <param name="operationBindingContext">
/// The <see cref="OperationBindingContext"/> associated with the binding operation.
/// </param>
/// <param name="metadata"><see cref="ModelMetadata"/> associated with the model.</param>
/// <param name="bindingInfo"><see cref="BindingInfo"/> associated with the model.</param>
/// <param name="modelName">The name of the property or parameter being bound.</param>
/// <returns>A new instance of <see cref="DefaultModelBindingContext"/>.</returns>
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(),
};
}
/// <inheritdoc /> /// <inheritdoc />
public override NestedScope EnterNestedScope( public override ActionContext ActionContext
ModelMetadata modelMetadata,
string fieldName,
string modelName,
object model)
{ {
if (modelMetadata == null) get { return _actionContext; }
{
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;
}
/// <inheritdoc />
public override NestedScope EnterNestedScope()
{
_stack.Push(_state);
Result = null;
return new NestedScope(this);
}
/// <inheritdoc />
protected override void ExitNestedScope()
{
_state = _stack.Pop();
}
/// <inheritdoc />
public override OperationBindingContext OperationBindingContext
{
get { return _operationBindingContext; }
set set
{ {
if (value == null) if (value == null)
{ {
throw new ArgumentNullException(nameof(value)); throw new ArgumentNullException(nameof(value));
} }
_operationBindingContext = value; _actionContext = value;
} }
} }
@ -211,20 +93,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <inheritdoc /> /// <inheritdoc />
public override ModelStateDictionary ModelState public override ModelStateDictionary ModelState
{ {
get { return _state.ModelState; } get { return _modelState; }
set set
{ {
if (value == null) if (value == null)
{ {
throw new ArgumentNullException(nameof(value)); throw new ArgumentNullException(nameof(value));
} }
_state.ModelState = value; _modelState = value;
} }
} }
/// <inheritdoc />
public override Type ModelType => ModelMetadata?.ModelType;
/// <inheritdoc /> /// <inheritdoc />
public override string BinderModelName public override string BinderModelName
{ {
@ -246,6 +125,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
set { _state.IsTopLevelObject = value; } set { _state.IsTopLevelObject = value; }
} }
/// <summary>
/// Gets or sets the original value provider to be used when value providers are not filtered.
/// </summary>
public IValueProvider OriginalValueProvider
{
get { return _originalValueProvider; }
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_originalValueProvider = value;
}
}
/// <inheritdoc /> /// <inheritdoc />
public override IValueProvider ValueProvider public override IValueProvider ValueProvider
{ {
@ -270,8 +165,15 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <inheritdoc /> /// <inheritdoc />
public override ValidationStateDictionary ValidationState public override ValidationStateDictionary ValidationState
{ {
get { return _state.ValidationState; } get { return _validationState; }
set { _state.ValidationState = value; } set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_validationState = value;
}
} }
/// <inheritdoc /> /// <inheritdoc />
@ -292,6 +194,131 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
} }
} }
/// <summary>
/// Creates a new <see cref="DefaultModelBindingContext"/> for top-level model binding operation.
/// </summary>
/// <param name="actionContext">
/// The <see cref="ActionContext"/> associated with the binding operation.
/// </param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> to use for binding.</param>
/// <param name="metadata"><see cref="ModelMetadata"/> associated with the model.</param>
/// <param name="bindingInfo"><see cref="BindingInfo"/> associated with the model.</param>
/// <param name="modelName">The name of the property or parameter being bound.</param>
/// <returns>A new instance of <see cref="DefaultModelBindingContext"/>.</returns>
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(),
};
}
/// <inheritdoc />
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;
}
/// <inheritdoc />
public override NestedScope EnterNestedScope()
{
_stack.Push(_state);
Result = null;
return new NestedScope(this);
}
/// <inheritdoc />
protected override void ExitNestedScope()
{
_state = _stack.Pop();
}
private static IValueProvider FilterValueProvider(IValueProvider valueProvider, BindingSource bindingSource) private static IValueProvider FilterValueProvider(IValueProvider valueProvider, BindingSource bindingSource)
{ {
if (bindingSource == null || bindingSource.IsGreedy) if (bindingSource == null || bindingSource.IsGreedy)
@ -317,8 +344,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
public IValueProvider ValueProvider; public IValueProvider ValueProvider;
public Func<ModelMetadata, bool> PropertyFilter; public Func<ModelMetadata, bool> PropertyFilter;
public ValidationStateDictionary ValidationState;
public ModelStateDictionary ModelState;
public string BinderModelName; public string BinderModelName;
public BindingSource BindingSource; public BindingSource BindingSource;

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
@ -14,34 +15,36 @@ namespace Microsoft.AspNetCore.Mvc.Internal
{ {
private readonly IModelMetadataProvider _modelMetadataProvider; private readonly IModelMetadataProvider _modelMetadataProvider;
private readonly ValidatorCache _validatorCache; private readonly ValidatorCache _validatorCache;
private readonly IModelValidatorProvider _validatorProvider;
/// <summary> /// <summary>
/// Initializes a new instance of <see cref="DefaultObjectValidator"/>. /// Initializes a new instance of <see cref="DefaultObjectValidator"/>.
/// </summary> /// </summary>
/// <param name="modelMetadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="modelMetadataProvider">The <see cref="IModelMetadataProvider"/>.</param>
/// <param name="validatorCache">The <see cref="ValidatorCache"/>.</param> /// <param name="validatorProviders">The list of <see cref="IModelValidatorProvider"/>.</param>
public DefaultObjectValidator( public DefaultObjectValidator(
IModelMetadataProvider modelMetadataProvider, IModelMetadataProvider modelMetadataProvider,
ValidatorCache validatorCache) IList<IModelValidatorProvider> validatorProviders)
{ {
if (modelMetadataProvider == null) if (modelMetadataProvider == null)
{ {
throw new ArgumentNullException(nameof(modelMetadataProvider)); throw new ArgumentNullException(nameof(modelMetadataProvider));
} }
if (validatorCache == null) if (validatorProviders == null)
{ {
throw new ArgumentNullException(nameof(validatorCache)); throw new ArgumentNullException(nameof(validatorProviders));
} }
_modelMetadataProvider = modelMetadataProvider; _modelMetadataProvider = modelMetadataProvider;
_validatorCache = validatorCache; _validatorCache = new ValidatorCache();
_validatorProvider = new CompositeModelValidatorProvider(validatorProviders);
} }
/// <inheritdoc /> /// <inheritdoc />
public void Validate( public void Validate(
ActionContext actionContext, ActionContext actionContext,
IModelValidatorProvider validatorProvider,
ValidationStateDictionary validationState, ValidationStateDictionary validationState,
string prefix, string prefix,
object model) object model)
@ -51,14 +54,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal
throw new ArgumentNullException(nameof(actionContext)); throw new ArgumentNullException(nameof(actionContext));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
var visitor = new ValidationVisitor( var visitor = new ValidationVisitor(
actionContext, actionContext,
validatorProvider, _validatorProvider,
_validatorCache, _validatorCache,
_modelMetadataProvider, _modelMetadataProvider,
validationState); validationState);

View File

@ -20,7 +20,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
{ {
private readonly ControllerActionInvokerCache _controllerActionInvokerCache; private readonly ControllerActionInvokerCache _controllerActionInvokerCache;
private readonly IReadOnlyList<IInputFormatter> _inputFormatters; private readonly IReadOnlyList<IInputFormatter> _inputFormatters;
private readonly IReadOnlyList<IModelValidatorProvider> _modelValidatorProviders;
private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories; private readonly IReadOnlyList<IValueProviderFactory> _valueProviderFactories;
private readonly DiagnosticSource _diagnosticSource; private readonly DiagnosticSource _diagnosticSource;
private readonly int _maxModelValidationErrors; private readonly int _maxModelValidationErrors;
@ -46,7 +45,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
ActionContext actionContext, ActionContext actionContext,
ControllerActionInvokerCache controllerActionInvokerCache, ControllerActionInvokerCache controllerActionInvokerCache,
IReadOnlyList<IInputFormatter> inputFormatters, IReadOnlyList<IInputFormatter> inputFormatters,
IReadOnlyList<IModelValidatorProvider> modelValidatorProviders,
IReadOnlyList<IValueProviderFactory> valueProviderFactories, IReadOnlyList<IValueProviderFactory> valueProviderFactories,
ILogger logger, ILogger logger,
DiagnosticSource diagnosticSource, DiagnosticSource diagnosticSource,
@ -67,11 +65,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
throw new ArgumentNullException(nameof(inputFormatters)); throw new ArgumentNullException(nameof(inputFormatters));
} }
if (modelValidatorProviders == null)
{
throw new ArgumentNullException(nameof(modelValidatorProviders));
}
if (valueProviderFactories == null) if (valueProviderFactories == null)
{ {
throw new ArgumentNullException(nameof(valueProviderFactories)); throw new ArgumentNullException(nameof(valueProviderFactories));
@ -91,7 +84,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
_controllerActionInvokerCache = controllerActionInvokerCache; _controllerActionInvokerCache = controllerActionInvokerCache;
_inputFormatters = inputFormatters; _inputFormatters = inputFormatters;
_modelValidatorProviders = modelValidatorProviders;
_valueProviderFactories = valueProviderFactories; _valueProviderFactories = valueProviderFactories;
Logger = logger; Logger = logger;
_diagnosticSource = diagnosticSource; _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 // We've reached the end of resource filters, so move to setting up state to invoke model
// binding. // binding.
Context.InputFormatters = new FormatterCollection<IInputFormatter>(
new CopyOnWriteList<IInputFormatter>(_inputFormatters));
Context.ValidatorProviders = new CopyOnWriteList<IModelValidatorProvider>(_modelValidatorProviders);
var valueProviders = new List<IValueProvider>(); var valueProviders = new List<IValueProvider>();
var factoryContext = new ValueProviderFactoryContext(Context); var factoryContext = new ValueProviderFactoryContext(Context);

View File

@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
// Set up ModelBinding // Set up ModelBinding
options.ModelBinderProviders.Add(new BinderTypeModelBinderProvider()); options.ModelBinderProviders.Add(new BinderTypeModelBinderProvider());
options.ModelBinderProviders.Add(new ServicesModelBinderProvider()); 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 HeaderModelBinderProvider());
options.ModelBinderProviders.Add(new SimpleTypeModelBinderProvider()); options.ModelBinderProviders.Add(new SimpleTypeModelBinderProvider());
options.ModelBinderProviders.Add(new CancellationTokenModelBinderProvider()); options.ModelBinderProviders.Add(new CancellationTokenModelBinderProvider());

View File

@ -48,7 +48,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
throw new ArgumentNullException(nameof(bindingContext)); throw new ArgumentNullException(nameof(bindingContext));
} }
var requestServices = bindingContext.OperationBindingContext.HttpContext.RequestServices; var requestServices = bindingContext.HttpContext.RequestServices;
var binder = (IModelBinder)_factory(requestServices, arguments: null); var binder = (IModelBinder)_factory(requestServices, arguments: null);
await binder.BindModelAsync(bindingContext); await binder.BindModelAsync(bindingContext);

View File

@ -2,8 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Core; using Microsoft.AspNetCore.Mvc.Core;
@ -18,17 +18,30 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
/// </summary> /// </summary>
public class BodyModelBinder : IModelBinder public class BodyModelBinder : IModelBinder
{ {
private readonly IList<IInputFormatter> _formatters;
private readonly Func<Stream, Encoding, TextReader> _readerFactory; private readonly Func<Stream, Encoding, TextReader> _readerFactory;
/// <summary> /// <summary>
/// Creates a new <see cref="BodyModelBinder"/>. /// Creates a new <see cref="BodyModelBinder"/>.
/// </summary> /// </summary>
/// <param name="formatters">The list of <see cref="IInputFormatter"/>.</param>
/// <param name="readerFactory"> /// <param name="readerFactory">
/// The <see cref="IHttpRequestStreamReaderFactory"/>, used to create <see cref="System.IO.TextReader"/> /// The <see cref="IHttpRequestStreamReaderFactory"/>, used to create <see cref="System.IO.TextReader"/>
/// instances for reading the request body. /// instances for reading the request body.
/// </param> /// </param>
public BodyModelBinder(IHttpRequestStreamReaderFactory readerFactory) public BodyModelBinder(IList<IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory)
{ {
if (formatters == null)
{
throw new ArgumentNullException(nameof(formatters));
}
if (readerFactory == null)
{
throw new ArgumentNullException(nameof(readerFactory));
}
_formatters = formatters;
_readerFactory = readerFactory.CreateReader; _readerFactory = readerFactory.CreateReader;
} }
@ -53,7 +66,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
modelBindingKey = bindingContext.ModelName; modelBindingKey = bindingContext.ModelName;
} }
var httpContext = bindingContext.OperationBindingContext.HttpContext; var httpContext = bindingContext.HttpContext;
var formatterContext = new InputFormatterContext( var formatterContext = new InputFormatterContext(
httpContext, httpContext,
@ -62,13 +75,19 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
bindingContext.ModelMetadata, bindingContext.ModelMetadata,
_readerFactory); _readerFactory);
var formatters = bindingContext.OperationBindingContext.InputFormatters; var formatter = (IInputFormatter)null;
var formatter = formatters.FirstOrDefault(f => f.CanRead(formatterContext)); for (var i = 0; i < _formatters.Count; i++)
{
if (_formatters[i].CanRead(formatterContext))
{
formatter = _formatters[i];
break;
}
}
if (formatter == null) if (formatter == null)
{ {
var message = Resources.FormatUnsupportedContentType( var message = Resources.FormatUnsupportedContentType(httpContext.Request.ContentType);
bindingContext.OperationBindingContext.HttpContext.Request.ContentType);
var exception = new UnsupportedContentTypeException(message); var exception = new UnsupportedContentTypeException(message);
bindingContext.ModelState.AddModelError(modelBindingKey, exception, bindingContext.ModelMetadata); bindingContext.ModelState.AddModelError(modelBindingKey, exception, bindingContext.ModelMetadata);

View File

@ -2,6 +2,8 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.Internal; using Microsoft.AspNetCore.Mvc.Internal;
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
@ -11,19 +13,27 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
/// </summary> /// </summary>
public class BodyModelBinderProvider : IModelBinderProvider public class BodyModelBinderProvider : IModelBinderProvider
{ {
private readonly IList<IInputFormatter> _formatters;
private readonly IHttpRequestStreamReaderFactory _readerFactory; private readonly IHttpRequestStreamReaderFactory _readerFactory;
/// <summary> /// <summary>
/// Creates a new <see cref="BodyModelBinderProvider"/>. /// Creates a new <see cref="BodyModelBinderProvider"/>.
/// </summary> /// </summary>
/// <param name="formatters">The list of <see cref="IInputFormatter"/>.</param>
/// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param>
public BodyModelBinderProvider(IHttpRequestStreamReaderFactory readerFactory) public BodyModelBinderProvider(IList<IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory)
{ {
if (formatters == null)
{
throw new ArgumentNullException(nameof(formatters));
}
if (readerFactory == null) if (readerFactory == null)
{ {
throw new ArgumentNullException(nameof(readerFactory)); throw new ArgumentNullException(nameof(readerFactory));
} }
_formatters = formatters;
_readerFactory = readerFactory; _readerFactory = readerFactory;
} }
@ -38,7 +48,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
if (context.BindingInfo?.BindingSource != null && if (context.BindingInfo?.BindingSource != null &&
context.BindingInfo.BindingSource.CanAcceptDataFrom(BindingSource.Body)) context.BindingInfo.BindingSource.CanAcceptDataFrom(BindingSource.Body))
{ {
return new BodyModelBinder(_readerFactory); return new BodyModelBinder(_formatters, _readerFactory);
} }
return null; return null;

View File

@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// in both the ValidationState and ModelBindingResult. // in both the ValidationState and ModelBindingResult.
// //
// DO NOT simplify this code by removing the cast. // 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.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true });
bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model); bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model);

View File

@ -158,10 +158,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ValueProviderResult values) ValueProviderResult values)
{ {
var boundCollection = new List<TElement>(); var boundCollection = new List<TElement>();
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var elementMetadata = bindingContext.ModelMetadata.ElementMetadata;
var elementMetadata = metadataProvider.GetMetadataForType(typeof(TElement));
foreach (var value in values) foreach (var value in values)
{ {
@ -223,8 +221,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
.Select(i => i.ToString(CultureInfo.InvariantCulture)); .Select(i => i.ToString(CultureInfo.InvariantCulture));
} }
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var elementMetadata = bindingContext.ModelMetadata.ElementMetadata;
var elementMetadata = metadataProvider.GetMetadataForType(typeof(TElement));
var boundCollection = new List<TElement>(); var boundCollection = new List<TElement>();

View File

@ -252,8 +252,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
modelName: modelName, modelName: modelName,
model: null)) model: null))
{ {
// If any property can return a true value. // If any property can be bound from a value provider then continue.
if (CanBindValue(bindingContext)) if (bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName))
{ {
return true; return true;
} }
@ -271,33 +271,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
return false; 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 for tests
internal static bool CanUpdatePropertyInternal(ModelMetadata propertyMetadata) internal static bool CanUpdatePropertyInternal(ModelMetadata propertyMetadata)
{ {

View File

@ -81,8 +81,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
} }
// Update the existing successful but empty ModelBindingResult. // Update the existing successful but empty ModelBindingResult.
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var elementMetadata = bindingContext.ModelMetadata.ElementMetadata;
var valueMetadata = metadataProvider.GetMetadataForType(typeof(TValue)); var valueMetadata = elementMetadata.Properties[nameof(KeyValuePair<TKey, TValue>.Value)];
var keyMappings = new Dictionary<string, TKey>(StringComparer.Ordinal); var keyMappings = new Dictionary<string, TKey>(StringComparer.Ordinal);
foreach (var kvp in keys) foreach (var kvp in keys)

View File

@ -26,7 +26,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
} }
object model; object model;
var request = bindingContext.OperationBindingContext.HttpContext.Request; var request = bindingContext.HttpContext.Request;
if (request.HasFormContentType) if (request.HasFormContentType)
{ {
var form = await request.ReadFormAsync(); var form = await request.ReadFormAsync();

View File

@ -118,7 +118,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelBindingContext bindingContext, ModelBindingContext bindingContext,
ICollection<IFormFile> postedFiles) ICollection<IFormFile> postedFiles)
{ {
var request = bindingContext.OperationBindingContext.HttpContext.Request; var request = bindingContext.HttpContext.Request;
if (request.HasFormContentType) if (request.HasFormContentType)
{ {
var form = await request.ReadFormAsync(); var form = await request.ReadFormAsync();

View File

@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
throw new ArgumentNullException(nameof(bindingContext)); 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). // Property name can be null if the model metadata represents a type (rather than a property or parameter).
var headerName = bindingContext.FieldName; var headerName = bindingContext.FieldName;

View File

@ -97,10 +97,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
IModelBinder binder, IModelBinder binder,
string propertyName) string propertyName)
{ {
var propertyModelMetadata = var propertyModelMetadata = bindingContext.ModelMetadata.Properties[propertyName];
bindingContext.OperationBindingContext.MetadataProvider.GetMetadataForType(typeof(TModel)); var propertyModelName = ModelNames.CreatePropertyModelName(bindingContext.ModelName, propertyName);
var propertyModelName =
ModelNames.CreatePropertyModelName(bindingContext.ModelName, propertyName);
using (bindingContext.EnterNestedScope( using (bindingContext.EnterNestedScope(
modelMetadata: propertyModelMetadata, modelMetadata: propertyModelMetadata,

View File

@ -23,7 +23,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
throw new ArgumentNullException(nameof(bindingContext)); throw new ArgumentNullException(nameof(bindingContext));
} }
var requestServices = bindingContext.OperationBindingContext.HttpContext.RequestServices; var requestServices = bindingContext.HttpContext.RequestServices;
var model = requestServices.GetRequiredService(bindingContext.ModelType); var model = requestServices.GetRequiredService(bindingContext.ModelType);
bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true }); bindingContext.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true });

View File

@ -12,7 +12,6 @@ using System.Reflection;
using System.Runtime.ExceptionServices; using System.Runtime.ExceptionServices;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Core; using Microsoft.AspNetCore.Mvc.Core;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation; using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc.ModelBinding namespace Microsoft.AspNetCore.Mvc.ModelBinding
@ -22,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <summary> /// <summary>
/// Updates the specified <paramref name="model"/> instance using the specified /// Updates the specified <paramref name="model"/> instance using the specified
/// <paramref name="modelBinderFactory"/> and the specified <paramref name="valueProvider"/> and executes /// <paramref name="modelBinderFactory"/> and the specified <paramref name="valueProvider"/> and executes
/// validation using the specified <paramref name="validatorProvider"/>. /// validation using the specified <paramref name="objectModelValidator"/>.
/// </summary> /// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam> /// <typeparam name="TModel">The type of the model object.</typeparam>
/// <param name="model">The model instance to update and validate.</param> /// <param name="model">The model instance to update and validate.</param>
@ -32,13 +31,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param>
/// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param> /// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param>
/// <param name="inputFormatters">
/// The set of <see cref="IInputFormatter"/> instances for deserializing the body.
/// </param>
/// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the /// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the
/// bound values.</param> /// bound values.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/> used for executing validation
/// on the model instance.</param>
/// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns> /// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns>
public static Task<bool> TryUpdateModelAsync<TModel>( public static Task<bool> TryUpdateModelAsync<TModel>(
TModel model, TModel model,
@ -47,9 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider, IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory, IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider, IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters, IObjectModelValidator objectModelValidator)
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider)
where TModel : class where TModel : class
{ {
if (model == null) if (model == null)
@ -82,21 +74,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider)); throw new ArgumentNullException(nameof(valueProvider));
} }
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null) if (objectModelValidator == null)
{ {
throw new ArgumentNullException(nameof(objectModelValidator)); throw new ArgumentNullException(nameof(objectModelValidator));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
// Includes everything by default. // Includes everything by default.
return TryUpdateModelAsync( return TryUpdateModelAsync(
model, model,
@ -105,16 +87,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
modelBinderFactory, modelBinderFactory,
valueProvider, valueProvider,
inputFormatters,
objectModelValidator, objectModelValidator,
validatorProvider,
propertyFilter: (m) => true); propertyFilter: (m) => true);
} }
/// <summary> /// <summary>
/// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/> /// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/>
/// and the specified <paramref name="valueProvider"/> and executes validation using the specified /// and the specified <paramref name="valueProvider"/> and executes validation using the specified
/// <paramref name="validatorProvider"/>. /// <paramref name="objectModelValidator"/>.
/// </summary> /// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam> /// <typeparam name="TModel">The type of the model object.</typeparam>
/// <param name="model">The model instance to update and validate.</param> /// <param name="model">The model instance to update and validate.</param>
@ -124,14 +104,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param>
/// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param> /// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param>
/// <param name="inputFormatters">
/// The set of <see cref="IInputFormatter"/> instances for deserializing the body.
/// </param>
/// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the /// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the
/// bound values.</param> /// bound values.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/> used for executing validation
/// on the model
/// instance.</param>
/// <param name="includeExpressions">Expression(s) which represent top level properties /// <param name="includeExpressions">Expression(s) which represent top level properties
/// which need to be included for the current model.</param> /// which need to be included for the current model.</param>
/// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns> /// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns>
@ -142,9 +116,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider, IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory, IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider, IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator, IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
params Expression<Func<TModel, object>>[] includeExpressions) params Expression<Func<TModel, object>>[] includeExpressions)
where TModel : class where TModel : class
{ {
@ -178,21 +150,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider)); throw new ArgumentNullException(nameof(valueProvider));
} }
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null) if (objectModelValidator == null)
{ {
throw new ArgumentNullException(nameof(objectModelValidator)); throw new ArgumentNullException(nameof(objectModelValidator));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (includeExpressions == null) if (includeExpressions == null)
{ {
throw new ArgumentNullException(nameof(includeExpressions)); throw new ArgumentNullException(nameof(includeExpressions));
@ -208,16 +170,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
modelBinderFactory, modelBinderFactory,
valueProvider, valueProvider,
inputFormatters,
objectModelValidator, objectModelValidator,
validatorProvider, propertyFilter);
propertyFilter: propertyFilter);
} }
/// <summary> /// <summary>
/// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/> /// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/>
/// and the specified <paramref name="valueProvider"/> and executes validation using the specified /// and the specified <paramref name="valueProvider"/> and executes validation using the specified
/// <paramref name="validatorProvider"/>. /// <paramref name="objectModelValidator"/>.
/// </summary> /// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam> /// <typeparam name="TModel">The type of the model object.</typeparam>
/// <param name="model">The model instance to update and validate.</param> /// <param name="model">The model instance to update and validate.</param>
@ -227,13 +187,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param>
/// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param> /// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param>
/// <param name="inputFormatters">
/// The set of <see cref="IInputFormatter"/> instances for deserializing the body.
/// </param>
/// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the /// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the
/// bound values.</param> /// bound values.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/> used for executing validation
/// on the model instance.</param>
/// <param name="propertyFilter"> /// <param name="propertyFilter">
/// A predicate which can be used to filter properties(for inclusion/exclusion) at runtime. /// A predicate which can be used to filter properties(for inclusion/exclusion) at runtime.
/// </param> /// </param>
@ -245,9 +200,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider, IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory, IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider, IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator, IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
Func<ModelMetadata, bool> propertyFilter) Func<ModelMetadata, bool> propertyFilter)
where TModel : class where TModel : class
{ {
@ -281,21 +234,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider)); throw new ArgumentNullException(nameof(valueProvider));
} }
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null) if (objectModelValidator == null)
{ {
throw new ArgumentNullException(nameof(objectModelValidator)); throw new ArgumentNullException(nameof(objectModelValidator));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (propertyFilter == null) if (propertyFilter == null)
{ {
throw new ArgumentNullException(nameof(propertyFilter)); throw new ArgumentNullException(nameof(propertyFilter));
@ -309,16 +252,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
modelBinderFactory, modelBinderFactory,
valueProvider, valueProvider,
inputFormatters,
objectModelValidator, objectModelValidator,
validatorProvider, propertyFilter);
propertyFilter: propertyFilter);
} }
/// <summary> /// <summary>
/// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/> /// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/>
/// and the specified <paramref name="valueProvider"/> and executes validation using the specified /// and the specified <paramref name="valueProvider"/> and executes validation using the specified
/// <paramref name="validatorProvider"/>. /// <paramref name="objectModelValidator"/>.
/// </summary> /// </summary>
/// <param name="model">The model instance to update and validate.</param> /// <param name="model">The model instance to update and validate.</param>
/// <param name="modelType">The type of model instance to update and validate.</param> /// <param name="modelType">The type of model instance to update and validate.</param>
@ -328,25 +269,18 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param>
/// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param> /// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param>
/// <param name="inputFormatters">
/// The set of <see cref="IInputFormatter"/> instances for deserializing the body.
/// </param>
/// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the /// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the
/// bound values.</param> /// bound values.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/> used for executing validation
/// on the model instance.</param>
/// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns> /// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns>
public static Task<bool> TryUpdateModelAsync( public static Task<bool> TryUpdateModelAsync(
object model, object model,
Type modelType, Type modelType,
string prefix, string prefix,
ActionContext actionContext, ActionContext actionContext,
IModelMetadataProvider metadataProvider, IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory, IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider, IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters, IObjectModelValidator objectModelValidator)
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider)
{ {
if (model == null) if (model == null)
{ {
@ -383,21 +317,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider)); throw new ArgumentNullException(nameof(valueProvider));
} }
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null) if (objectModelValidator == null)
{ {
throw new ArgumentNullException(nameof(objectModelValidator)); throw new ArgumentNullException(nameof(objectModelValidator));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
// Includes everything by default. // Includes everything by default.
return TryUpdateModelAsync( return TryUpdateModelAsync(
model, model,
@ -407,16 +331,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
modelBinderFactory, modelBinderFactory,
valueProvider, valueProvider,
inputFormatters,
objectModelValidator, objectModelValidator,
validatorProvider,
propertyFilter: (m) => true); propertyFilter: (m) => true);
} }
/// <summary> /// <summary>
/// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/> /// Updates the specified <paramref name="model"/> instance using the specified <paramref name="modelBinderFactory"/>
/// and the specified <paramref name="valueProvider"/> and executes validation using the specified /// and the specified <paramref name="valueProvider"/> and executes validation using the specified
/// <paramref name="validatorProvider"/>. /// <paramref name="objectModelValidator"/>.
/// </summary> /// </summary>
/// <param name="model">The model instance to update and validate.</param> /// <param name="model">The model instance to update and validate.</param>
/// <param name="modelType">The type of model instance to update and validate.</param> /// <param name="modelType">The type of model instance to update and validate.</param>
@ -426,13 +348,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <param name="metadataProvider">The provider used for reading metadata for the model type.</param> /// <param name="metadataProvider">The provider used for reading metadata for the model type.</param>
/// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param> /// <param name="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/> used for looking up values.</param>
/// <param name="inputFormatters">
/// The set of <see cref="IInputFormatter"/> instances for deserializing the body.
/// </param>
/// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the /// <param name="objectModelValidator">The <see cref="IObjectModelValidator"/> used for validating the
/// bound values.</param> /// bound values.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/> used for executing validation
/// on the model instance.</param>
/// <param name="propertyFilter">A predicate which can be used to /// <param name="propertyFilter">A predicate which can be used to
/// filter properties(for inclusion/exclusion) at runtime.</param> /// filter properties(for inclusion/exclusion) at runtime.</param>
/// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns> /// <returns>A <see cref="Task"/> that on completion returns <c>true</c> if the update is successful</returns>
@ -444,9 +361,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider, IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory, IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider, IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator, IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
Func<ModelMetadata, bool> propertyFilter) Func<ModelMetadata, bool> propertyFilter)
{ {
if (model == null) if (model == null)
@ -484,21 +399,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider)); throw new ArgumentNullException(nameof(valueProvider));
} }
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null) if (objectModelValidator == null)
{ {
throw new ArgumentNullException(nameof(objectModelValidator)); throw new ArgumentNullException(nameof(objectModelValidator));
} }
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (propertyFilter == null) if (propertyFilter == null)
{ {
throw new ArgumentNullException(nameof(propertyFilter)); throw new ArgumentNullException(nameof(propertyFilter));
@ -515,20 +420,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var modelMetadata = metadataProvider.GetMetadataForType(modelType); var modelMetadata = metadataProvider.GetMetadataForType(modelType);
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var operationBindingContext = new OperationBindingContext
{
InputFormatters = inputFormatters,
ValidatorProvider = validatorProvider,
MetadataProvider = metadataProvider,
ActionContext = actionContext,
ValueProvider = valueProvider,
};
var modelBindingContext = DefaultModelBindingContext.CreateBindingContext( var modelBindingContext = DefaultModelBindingContext.CreateBindingContext(
operationBindingContext, actionContext,
valueProvider,
modelMetadata, modelMetadata,
bindingInfo: null, bindingInfo: null,
modelName: prefix ?? string.Empty); modelName: prefix ?? string.Empty);
modelBindingContext.Model = model; modelBindingContext.Model = model;
modelBindingContext.PropertyFilter = propertyFilter; modelBindingContext.PropertyFilter = propertyFilter;
@ -555,8 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
if (modelBindingResult != null && modelBindingResult.Value.IsModelSet) if (modelBindingResult != null && modelBindingResult.Value.IsModelSet)
{ {
objectModelValidator.Validate( objectModelValidator.Validate(
operationBindingContext.ActionContext, actionContext,
operationBindingContext.ValidatorProvider,
modelBindingContext.ValidationState, modelBindingContext.ValidationState,
modelBindingResult.Value.Key, modelBindingResult.Value.Key,
modelBindingResult.Value.Model); modelBindingResult.Value.Model);

View File

@ -12,7 +12,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation
/// Validates the provided object. /// Validates the provided object.
/// </summary> /// </summary>
/// <param name="actionContext">The <see cref="ActionContext"/> associated with the current request.</param> /// <param name="actionContext">The <see cref="ActionContext"/> associated with the current request.</param>
/// <param name="validatorProvider">The <see cref="IModelValidatorProvider"/>.</param>
/// <param name="validationState">The <see cref="ValidationStateDictionary"/>. May be null.</param> /// <param name="validationState">The <see cref="ValidationStateDictionary"/>. May be null.</param>
/// <param name="prefix"> /// <param name="prefix">
/// The model prefix. Used to map the model object to entries in <paramref name="validationState"/>. /// The model prefix. Used to map the model object to entries in <paramref name="validationState"/>.
@ -20,7 +19,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation
/// <param name="model">The model object.</param> /// <param name="model">The model object.</param>
void Validate( void Validate(
ActionContext actionContext, ActionContext actionContext,
IModelValidatorProvider validatorProvider,
ValidationStateDictionary validationState, ValidationStateDictionary validationState,
string prefix, string prefix,
object model); object model);

View File

@ -567,13 +567,11 @@ namespace System.Web.Http
/// </param> /// </param>
public void Validate<TEntity>(TEntity entity, string keyPrefix) public void Validate<TEntity>(TEntity entity, string keyPrefix)
{ {
var validatidationState = new ValidationStateDictionary();
ObjectValidator.Validate( ObjectValidator.Validate(
ControllerContext, ControllerContext,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders), validationState: null,
validatidationState, prefix: keyPrefix,
keyPrefix, model: entity);
entity);
} }
protected virtual void Dispose(bool disposing) protected virtual void Dispose(bool disposing)

View File

@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim
/// <inheritdoc /> /// <inheritdoc />
public Task BindModelAsync(ModelBindingContext bindingContext) 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.ValidationState.Add(model, new ValidationStateEntry() { SuppressValidation = true });
bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model); bindingContext.Result = ModelBindingResult.Success(bindingContext.ModelName, model);

View File

@ -1373,10 +1373,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
// Arrange // Arrange
var binder = new StubModelBinder(); var binder = new StubModelBinder();
var controller = GetController(binder, valueProvider: null); var controller = GetController(binder, valueProvider: null);
controller.ControllerContext.ValidatorProviders = new List<IModelValidatorProvider>() controller.ObjectValidator = new DefaultObjectValidator(
{ controller.MetadataProvider,
Mock.Of<IModelValidatorProvider>(), new[] { Mock.Of<IModelValidatorProvider>() });
};
var model = new TryValidateModelModel(); var model = new TryValidateModelModel();
@ -1410,10 +1409,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
var binder = new StubModelBinder(); var binder = new StubModelBinder();
var controller = GetController(binder, valueProvider: null); var controller = GetController(binder, valueProvider: null);
controller.ControllerContext.ValidatorProviders = new List<IModelValidatorProvider>() controller.ObjectValidator = new DefaultObjectValidator(
{ controller.MetadataProvider,
provider.Object, new[] { provider.Object });
};
// Act // Act
var result = controller.TryValidateModel(model, "Prefix"); var result = controller.TryValidateModel(model, "Prefix");
@ -1447,10 +1445,9 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
var binder = new StubModelBinder(); var binder = new StubModelBinder();
var controller = GetController(binder, valueProvider: null); var controller = GetController(binder, valueProvider: null);
controller.ControllerContext.ValidatorProviders = new List<IModelValidatorProvider>() controller.ObjectValidator = new DefaultObjectValidator(
{ controller.MetadataProvider,
provider.Object, new[] { provider.Object });
};
// Act // Act
var result = controller.TryValidateModel(model); var result = controller.TryValidateModel(model);
@ -1483,17 +1480,18 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var httpContext = new DefaultHttpContext(); var httpContext = new DefaultHttpContext();
var validatorProviders = new[]
{
new DataAnnotationsModelValidatorProvider(
new ValidationAttributeAdapterProvider(),
new TestOptionsManager<MvcDataAnnotationsLocalizationOptions>(),
stringLocalizerFactory: null),
};
var controllerContext = new ControllerContext() var controllerContext = new ControllerContext()
{ {
HttpContext = httpContext, HttpContext = httpContext,
ValueProviders = new[] { valueProvider, }, ValueProviders = new[] { valueProvider, },
ValidatorProviders = new[]
{
new DataAnnotationsModelValidatorProvider(
new ValidationAttributeAdapterProvider(),
new TestOptionsManager<MvcDataAnnotationsLocalizationOptions>(),
stringLocalizerFactory: null),
},
}; };
var binderFactory = new Mock<IModelBinderFactory>(); var binderFactory = new Mock<IModelBinderFactory>();
@ -1506,7 +1504,7 @@ namespace Microsoft.AspNetCore.Mvc.Core.Test
ControllerContext = controllerContext, ControllerContext = controllerContext,
MetadataProvider = metadataProvider, MetadataProvider = metadataProvider,
ModelBinderFactory = binderFactory.Object, ModelBinderFactory = binderFactory.Object,
ObjectValidator = new DefaultObjectValidator(metadataProvider, new ValidatorCache()), ObjectValidator = new DefaultObjectValidator(metadataProvider, validatorProviders),
}; };
return controller; return controller;

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Internal; using Microsoft.AspNetCore.Mvc.Internal;
@ -126,12 +127,15 @@ namespace Microsoft.AspNetCore.Mvc.Controllers
{ {
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
var services = new Mock<IServiceProvider>(); var services = new Mock<IServiceProvider>();
services.Setup(s => s.GetService(typeof(IUrlHelper))) services
.Setup(s => s.GetService(typeof(IUrlHelper)))
.Returns(Mock.Of<IUrlHelper>()); .Returns(Mock.Of<IUrlHelper>());
services.Setup(s => s.GetService(typeof(IModelMetadataProvider))) services
.Setup(s => s.GetService(typeof(IModelMetadataProvider)))
.Returns(metadataProvider); .Returns(metadataProvider);
services.Setup(s => s.GetService(typeof(IObjectModelValidator))) services
.Returns(new DefaultObjectValidator(metadataProvider, new ValidatorCache())); .Setup(s => s.GetService(typeof(IObjectModelValidator)))
.Returns(new DefaultObjectValidator(metadataProvider, new List<IModelValidatorProvider>()));
return services.Object; return services.Object;
} }

View File

@ -205,12 +205,17 @@ namespace Microsoft.AspNetCore.Mvc.Controllers
{ {
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
var services = new Mock<IServiceProvider>(); var services = new Mock<IServiceProvider>();
services.Setup(s => s.GetService(typeof(IUrlHelper))) services
.Returns(Mock.Of<IUrlHelper>()); .Setup(s => s.GetService(typeof(IUrlHelper)))
services.Setup(s => s.GetService(typeof(IModelMetadataProvider))) .Returns(Mock.Of<IUrlHelper>());
.Returns(metadataProvider); services
services.Setup(s => s.GetService(typeof(IObjectModelValidator))) .Setup(s => s.GetService(typeof(IModelMetadataProvider)))
.Returns(new DefaultObjectValidator(metadataProvider, new ValidatorCache())); .Returns(metadataProvider);
services
.Setup(s => s.GetService(typeof(IObjectModelValidator)))
.Returns(new DefaultObjectValidator(
metadataProvider,
TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders));
return services.Object; return services.Object;
} }

View File

@ -2053,7 +2053,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
actionDescriptor, actionDescriptor,
new IInputFormatter[0], new IInputFormatter[0],
actionArgumentsBinder.Object, actionArgumentsBinder.Object,
new IModelValidatorProvider[0],
new IValueProviderFactory[0], new IValueProviderFactory[0],
new NullLoggerFactory().CreateLogger<ControllerActionInvoker>(), new NullLoggerFactory().CreateLogger<ControllerActionInvoker>(),
new DiagnosticListener("Microsoft.AspNetCore"), new DiagnosticListener("Microsoft.AspNetCore"),
@ -2108,8 +2107,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
new ControllerArgumentBinder( new ControllerArgumentBinder(
metadataProvider, metadataProvider,
TestModelBinderFactory.CreateDefault(metadataProvider), TestModelBinderFactory.CreateDefault(metadataProvider),
new DefaultObjectValidator(metadataProvider, new ValidatorCache())), new DefaultObjectValidator(metadataProvider, new IModelValidatorProvider[0])),
new IModelValidatorProvider[0],
new IValueProviderFactory[0], new IValueProviderFactory[0],
new NullLoggerFactory().CreateLogger<ControllerActionInvoker>(), new NullLoggerFactory().CreateLogger<ControllerActionInvoker>(),
new DiagnosticListener("Microsoft.AspNetCore"), new DiagnosticListener("Microsoft.AspNetCore"),
@ -2233,7 +2231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
ControllerActionDescriptor descriptor, ControllerActionDescriptor descriptor,
IReadOnlyList<IInputFormatter> inputFormatters, IReadOnlyList<IInputFormatter> inputFormatters,
IControllerActionArgumentBinder controllerActionArgumentBinder, IControllerActionArgumentBinder controllerActionArgumentBinder,
IReadOnlyList<IModelValidatorProvider> modelValidatorProviders,
IReadOnlyList<IValueProviderFactory> valueProviderFactories, IReadOnlyList<IValueProviderFactory> valueProviderFactories,
ILogger logger, ILogger logger,
DiagnosticSource diagnosticSource, DiagnosticSource diagnosticSource,
@ -2245,7 +2242,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
descriptor, descriptor,
inputFormatters, inputFormatters,
controllerActionArgumentBinder, controllerActionArgumentBinder,
modelValidatorProviders,
valueProviderFactories, valueProviderFactories,
logger, logger,
diagnosticSource, diagnosticSource,

View File

@ -135,7 +135,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Setup(o => o.Validate( .Setup(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())); It.IsAny<object>()));
@ -149,7 +148,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Verify(o => o.Validate( .Verify(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>()), It.IsAny<object>()),
@ -181,7 +179,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Setup(o => o.Validate( .Setup(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())); It.IsAny<object>()));
@ -196,7 +193,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Verify(o => o.Validate( .Verify(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>()), It.IsAny<object>()),
@ -221,7 +217,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Setup(o => o.Validate( .Setup(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())); It.IsAny<object>()));
@ -236,7 +231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Verify(o => o.Validate( .Verify(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>()), It.IsAny<object>()),
@ -267,7 +261,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Setup(o => o.Validate( .Setup(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())); It.IsAny<object>()));
@ -282,7 +275,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Verify(o => o.Validate( .Verify(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>()), It.IsAny<object>()),
@ -637,7 +629,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
mockValidator mockValidator
.Setup(o => o.Validate( .Setup(o => o.Validate(
It.IsAny<ActionContext>(), It.IsAny<ActionContext>(),
It.IsAny<IModelValidatorProvider>(),
It.IsAny<ValidationStateDictionary>(), It.IsAny<ValidationStateDictionary>(),
It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<object>())); It.IsAny<object>()));

View File

@ -25,7 +25,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_SimpleValueType_Valid_WithPrefix() public void Validate_SimpleValueType_Valid_WithPrefix()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -38,7 +37,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
AssertKeysEqual(modelState, "parameter"); AssertKeysEqual(modelState, "parameter");
@ -52,7 +51,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_SimpleReferenceType_Valid_WithPrefix() public void Validate_SimpleReferenceType_Valid_WithPrefix()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -65,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -80,7 +78,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_SimpleType_MaxErrorsReached() public void Validate_SimpleType_MaxErrorsReached()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -95,7 +92,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -110,7 +107,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_SimpleType_SuppressValidation() public void Validate_SimpleType_SuppressValidation()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -123,7 +119,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter", SuppressValidation = true }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter", SuppressValidation = true });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -139,7 +135,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexValueType_Valid() public void Validate_ComplexValueType_Valid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -153,7 +148,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -172,7 +167,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexReferenceType_Valid() public void Validate_ComplexReferenceType_Valid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -186,7 +180,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -205,7 +199,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexReferenceType_Invalid() public void Validate_ComplexReferenceType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -217,7 +210,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -238,7 +231,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexType_SuppressValidation() public void Validate_ComplexType_SuppressValidation()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -261,7 +253,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
}); });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "person", model); validator.Validate(actionContext, validationState, "person", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -281,7 +273,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty() public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -294,7 +285,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -314,7 +305,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty_EmptyPrefix() public void Validate_ComplexReferenceType_Invalid_MultipleErrorsOnProperty_EmptyPrefix()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -327,7 +317,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -347,7 +337,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_NestedComplexReferenceType_Invalid() public void Validate_NestedComplexReferenceType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -360,7 +349,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -392,7 +381,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexType_IValidatableObject_Invalid() public void Validate_ComplexType_IValidatableObject_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -406,7 +394,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -447,8 +435,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
httpContext.SetupGet(x => x.RequestServices).Returns(provider); httpContext.SetupGet(x => x.RequestServices).Returns(provider);
var actionContext = new ActionContext { HttpContext = httpContext.Object }; var actionContext = new ActionContext { HttpContext = httpContext.Object };
var validatorProvider = CreateValidatorProvider();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -466,12 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
.Returns(new List<ValidationResult>()); .Returns(new List<ValidationResult>());
// Act // Act
validator.Validate( validator.Validate(actionContext, validationState, prefix: null, model: model.Object);
actionContext,
validatorProvider,
validationState,
null,
model.Object);
// Assert // Assert
service.Verify(); service.Verify();
@ -482,7 +464,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexType_FieldsAreIgnored_Valid() public void Validate_ComplexType_FieldsAreIgnored_Valid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -495,7 +476,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -511,7 +492,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexType_CyclesNotFollowed_Invalid() public void Validate_ComplexType_CyclesNotFollowed_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -527,7 +507,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -547,7 +527,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ComplexType_ShortCircuit_WhenMaxErrorCountIsSet() public void Validate_ComplexType_ShortCircuit_WhenMaxErrorCountIsSet()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -568,7 +547,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "user", }); validationState.Add(model, new ValidationStateEntry() { Key = "user", });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "user", model); validator.Validate(actionContext, validationState, "user", model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -585,7 +564,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_CollectionType_ArrayOfSimpleType_Valid_DefaultKeyPattern() public void Validate_CollectionType_ArrayOfSimpleType_Valid_DefaultKeyPattern()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -599,7 +577,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "parameter" }); validationState.Add(model, new ValidationStateEntry() { Key = "parameter" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "parameter", model); validator.Validate(actionContext, validationState, "parameter", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -619,7 +597,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_CollectionType_ArrayOfComplexType_Invalid() public void Validate_CollectionType_ArrayOfComplexType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -631,7 +608,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -663,7 +640,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_CollectionType_ListOfComplexType_Invalid() public void Validate_CollectionType_ListOfComplexType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -675,7 +651,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -739,7 +715,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_IndexedCollectionTypes_Valid(object model, Type type) public void Validate_IndexedCollectionTypes_Valid(object model, Type type)
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -758,7 +733,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
}); });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "items", model); validator.Validate(actionContext, validationState, "items", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -781,7 +756,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_CollectionType_DictionaryOfSimpleType_Invalid() public void Validate_CollectionType_DictionaryOfSimpleType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -801,7 +775,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "items" }); validationState.Add(model, new ValidationStateEntry() { Key = "items" });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "items", model); validator.Validate(actionContext, validationState, "items", model);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -829,7 +803,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_CollectionType_DictionaryOfComplexType_Invalid() public void Validate_CollectionType_DictionaryOfComplexType_Invalid()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -843,7 +816,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = string.Empty }); validationState.Add(model, new ValidationStateEntry() { Key = string.Empty });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -890,7 +863,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_DoesntCatchExceptions_FromPropertyAccessors() public void Validate_DoesntCatchExceptions_FromPropertyAccessors()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -904,7 +876,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
typeof(InvalidTimeZoneException), 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() public void Validate_DoesNotUseOverridden_GetHashCodeOrEquals()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -927,14 +898,13 @@ namespace Microsoft.AspNetCore.Mvc.Internal
}; };
// Act & Assert (does not throw) // Act & Assert (does not throw)
validator.Validate(actionContext, validatorProvider, validationState, string.Empty, model); validator.Validate(actionContext, validationState, string.Empty, model);
} }
[Fact] [Fact]
public void Validate_ForExcludedComplexType_PropertiesMarkedAsSkipped() public void Validate_ForExcludedComplexType_PropertiesMarkedAsSkipped()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -953,7 +923,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "user", }); validationState.Add(model, new ValidationStateEntry() { Key = "user", });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "user", model); validator.Validate(actionContext, validationState, "user", model);
// Assert // Assert
Assert.Equal(ModelValidationState.Valid, modelState.ValidationState); Assert.Equal(ModelValidationState.Valid, modelState.ValidationState);
@ -968,7 +938,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
public void Validate_ForExcludedCollectionType_PropertiesMarkedAsSkipped() public void Validate_ForExcludedCollectionType_PropertiesMarkedAsSkipped()
{ {
// Arrange // Arrange
var validatorProvider = CreateValidatorProvider();
var actionContext = new ActionContext(); var actionContext = new ActionContext();
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
var validationState = new ValidationStateDictionary(); var validationState = new ValidationStateDictionary();
@ -984,7 +953,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
validationState.Add(model, new ValidationStateEntry() { Key = "userIds", }); validationState.Add(model, new ValidationStateEntry() { Key = "userIds", });
// Act // Act
validator.Validate(actionContext, validatorProvider, validationState, "userIds", model); validator.Validate(actionContext, validationState, "userIds", model);
// Assert // Assert
Assert.Equal(ModelValidationState.Valid, modelState.ValidationState); Assert.Equal(ModelValidationState.Valid, modelState.ValidationState);
@ -995,11 +964,6 @@ namespace Microsoft.AspNetCore.Mvc.Internal
Assert.Empty(entry.Errors); Assert.Empty(entry.Errors);
} }
private static IModelValidatorProvider CreateValidatorProvider()
{
return TestModelValidatorProvider.CreateDefaultProvider();
}
private static DefaultObjectValidator CreateValidator(Type excludedType) private static DefaultObjectValidator CreateValidator(Type excludedType)
{ {
var excludeFilters = new List<ValidationExcludeFilter>(); var excludeFilters = new List<ValidationExcludeFilter>();
@ -1008,14 +972,16 @@ namespace Microsoft.AspNetCore.Mvc.Internal
excludeFilters.Add(new ValidationExcludeFilter(excludedType)); excludeFilters.Add(new ValidationExcludeFilter(excludedType));
} }
var provider = TestModelMetadataProvider.CreateDefaultProvider(excludeFilters.ToArray()); var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(excludeFilters.ToArray());
return new DefaultObjectValidator(provider, new ValidatorCache()); var validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders;
return new DefaultObjectValidator(metadataProvider, validatorProviders);
} }
private static DefaultObjectValidator CreateValidator(params IMetadataDetailsProvider[] providers) private static DefaultObjectValidator CreateValidator(params IMetadataDetailsProvider[] providers)
{ {
var provider = TestModelMetadataProvider.CreateDefaultProvider(providers); var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider(providers);
return new DefaultObjectValidator(provider, new ValidatorCache()); var validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders;
return new DefaultObjectValidator(metadataProvider, validatorProviders);
} }
private static void AssertKeysEqual(ModelStateDictionary modelState, params string[] keys) private static void AssertKeysEqual(ModelStateDictionary modelState, params string[] keys)

View File

@ -19,8 +19,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ "someName[0]", "42" }, { "someName[0]", "42" },
{ "someName[1]", "84" }, { "someName[1]", "84" },
}; };
var bindingContext = GetBindingContext(valueProvider); 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<int>(new SimpleTypeModelBinder(typeof(int))); var binder = new ArrayModelBinder<int>(new SimpleTypeModelBinder(typeof(int)));
// Act // Act
@ -45,7 +50,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Lack of prefix and non-empty model name both ignored. // Lack of prefix and non-empty model name both ignored.
context.ModelName = "modelName"; context.ModelName = "modelName";
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(string[])); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(string[]));
context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>());
@ -72,7 +77,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ArrayProperty"); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ArrayProperty");
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithArrayProperty), typeof(ModelWithArrayProperty),
nameof(ModelWithArrayProperty.ArrayProperty)); nameof(ModelWithArrayProperty.ArrayProperty));
@ -112,10 +117,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ "someName[1]", "84" }, { "someName[1]", "84" },
}; };
var bindingContext = GetBindingContext(valueProvider, isReadOnly: false); var bindingContext = GetBindingContext(valueProvider);
var modelState = bindingContext.ModelState;
bindingContext.Model = model; 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<int>(new SimpleTypeModelBinder(typeof(int))); var binder = new ArrayModelBinder<int>(new SimpleTypeModelBinder(typeof(int)));
// Act // Act
@ -125,7 +137,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
Assert.NotEqual(default(ModelBindingResult), result); Assert.NotEqual(default(ModelBindingResult), result);
Assert.True(result.IsModelSet); Assert.True(result.IsModelSet);
Assert.Same(model, result.Model); Assert.Same(model, result.Model);
for (var i = 0; i < arrayLength; i++) for (var i = 0; i < arrayLength; i++)
{ {
// Array should be unchanged. // Array should be unchanged.
@ -147,28 +159,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
}); });
} }
private static DefaultModelBindingContext GetBindingContext( private static DefaultModelBindingContext GetBindingContext(IValueProvider valueProvider)
IValueProvider valueProvider,
bool isReadOnly = false)
{ {
var metadataProvider = new TestModelMetadataProvider(); var bindingContext = new DefaultModelBindingContext()
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
{ {
ModelMetadata = modelMetadata,
ModelName = "someName", ModelName = "someName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
ValueProvider = valueProvider, ValueProvider = valueProvider,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metadataProvider,
},
}; };
return bindingContext; return bindingContext;
} }
@ -177,14 +174,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ {
var modelBindingContext = new DefaultModelBindingContext() var modelBindingContext = new DefaultModelBindingContext()
{ {
OperationBindingContext = new OperationBindingContext() ActionContext = new ActionContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{ },
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = new TestModelMetadataProvider(),
}
}; };
return modelBindingContext; return modelBindingContext;

View File

@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
.AddSingleton<IModelBinder, NullModelBinder>() .AddSingleton<IModelBinder, NullModelBinder>()
.BuildServiceProvider(); .BuildServiceProvider();
bindingContext.OperationBindingContext.HttpContext.RequestServices = serviceProvider; bindingContext.HttpContext.RequestServices = serviceProvider;
var binder = new BinderTypeModelBinder(typeof(NotNullModelBinder)); var binder = new BinderTypeModelBinder(typeof(NotNullModelBinder));
@ -75,23 +75,16 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadataProvider = new TestModelMetadataProvider(); var metadataProvider = new TestModelMetadataProvider();
metadataProvider.ForType(modelType).BindingDetails(bd => bd.BinderType = binderType); metadataProvider.ForType(modelType).BindingDetails(bd => bd.BinderType = binderType);
var operationBindingContext = new OperationBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext() ActionContext = new ActionContext()
{ {
HttpContext = new DefaultHttpContext(), HttpContext = new DefaultHttpContext(),
}, },
MetadataProvider = metadataProvider,
ValidatorProvider = Mock.Of<IModelValidatorProvider>(),
};
var bindingContext = new DefaultModelBindingContext
{
ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelMetadata = metadataProvider.GetMetadataForType(modelType),
ModelName = "someName", ModelName = "someName",
ValueProvider = Mock.Of<IValueProvider>(), ValueProvider = Mock.Of<IValueProvider>(),
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = operationBindingContext,
}; };
return bindingContext; return bindingContext;

View File

@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved. // 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. // 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; using Xunit;
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
@ -25,7 +27,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
public void Create_WhenBindingSourceIsNotFromBody_ReturnsNull(BindingSource source) public void Create_WhenBindingSourceIsNotFromBody_ReturnsNull(BindingSource source)
{ {
// Arrange // Arrange
var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory()); var provider = CreateProvider();
var context = new TestModelBinderProviderContext(typeof(Person)); var context = new TestModelBinderProviderContext(typeof(Person));
context.BindingInfo.BindingSource = source; context.BindingInfo.BindingSource = source;
@ -41,7 +43,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
public void Create_WhenBindingSourceIsFromBody_ReturnsBinder() public void Create_WhenBindingSourceIsFromBody_ReturnsBinder()
{ {
// Arrange // Arrange
var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory()); var provider = CreateProvider();
var context = new TestModelBinderProviderContext(typeof(Person)); var context = new TestModelBinderProviderContext(typeof(Person));
context.BindingInfo.BindingSource = BindingSource.Body; context.BindingInfo.BindingSource = BindingSource.Body;
@ -53,6 +55,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
Assert.IsType<BodyModelBinder>(result); Assert.IsType<BodyModelBinder>(result);
} }
private static BodyModelBinderProvider CreateProvider()
{
return new BodyModelBinderProvider(new List<IInputFormatter>(), new TestHttpRequestStreamReaderFactory());
}
private class Person private class Person
{ {
public string Name { get; set; } public string Name { get; set; }

View File

@ -35,10 +35,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext( var bindingContext = GetBindingContext(
typeof(Person), typeof(Person),
new[] { inputFormatter },
metadataProvider: provider); metadataProvider: provider);
var binder = CreateBinder(); var binder = CreateBinder(new[] { inputFormatter });
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -59,7 +58,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider);
var binder = CreateBinder(); var binder = CreateBinder(new List<IInputFormatter>());
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -87,7 +86,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider);
bindingContext.BinderModelName = "custom"; bindingContext.BinderModelName = "custom";
var binder = CreateBinder(); var binder = CreateBinder(new List<IInputFormatter>());
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -114,7 +113,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider); var bindingContext = GetBindingContext(typeof(Person), metadataProvider: provider);
var binder = CreateBinder(); var binder = CreateBinder(new List<IInputFormatter>());
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -137,11 +136,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext( var bindingContext = GetBindingContext(
typeof(Person), typeof(Person),
inputFormatters: new[] { new XyzFormatter() },
httpContext: httpContext, httpContext: httpContext,
metadataProvider: provider); metadataProvider: provider);
var binder = CreateBinder(); var binder = CreateBinder(new[] { new XyzFormatter() });
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -172,11 +170,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = GetBindingContext( var bindingContext = GetBindingContext(
typeof(Person), typeof(Person),
inputFormatters: null,
httpContext: httpContext, httpContext: httpContext,
metadataProvider: provider); metadataProvider: provider);
var binder = CreateBinder(); var binder = CreateBinder(new List<IInputFormatter>());
// Act // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -208,11 +205,12 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
canReadFormatter1, canReadFormatter1,
canReadFormatter2 canReadFormatter2
}; };
var provider = new TestModelMetadataProvider(); var provider = new TestModelMetadataProvider();
provider.ForType<Person>().BindingDetails(d => d.BindingSource = BindingSource.Body); provider.ForType<Person>().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 // Act
var binderResult = await binder.BindModelResultAsync(bindingContext); var binderResult = await binder.BindModelResultAsync(bindingContext);
@ -224,7 +222,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
private static DefaultModelBindingContext GetBindingContext( private static DefaultModelBindingContext GetBindingContext(
Type modelType, Type modelType,
IEnumerable<IInputFormatter> inputFormatters = null,
HttpContext httpContext = null, HttpContext httpContext = null,
IModelMetadataProvider metadataProvider = null) IModelMetadataProvider metadataProvider = null)
{ {
@ -233,44 +230,32 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
httpContext = new DefaultHttpContext(); httpContext = new DefaultHttpContext();
} }
if (inputFormatters == null)
{
inputFormatters = Enumerable.Empty<IInputFormatter>();
}
if (metadataProvider == null) if (metadataProvider == null)
{ {
metadataProvider = new EmptyModelMetadataProvider(); metadataProvider = new EmptyModelMetadataProvider();
} }
var operationBindingContext = new OperationBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext() ActionContext = new ActionContext()
{ {
HttpContext = httpContext, HttpContext = httpContext,
}, },
InputFormatters = inputFormatters.ToList(),
MetadataProvider = metadataProvider,
};
var bindingContext = new DefaultModelBindingContext
{
FieldName = "someField", FieldName = "someField",
IsTopLevelObject = true, IsTopLevelObject = true,
ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelMetadata = metadataProvider.GetMetadataForType(modelType),
ModelName = "someName", ModelName = "someName",
ValueProvider = Mock.Of<IValueProvider>(), ValueProvider = Mock.Of<IValueProvider>(),
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = operationBindingContext,
BindingSource = BindingSource.Body, BindingSource = BindingSource.Body,
}; };
return bindingContext; return bindingContext;
} }
private static BodyModelBinder CreateBinder() private static BodyModelBinder CreateBinder(IList<IInputFormatter> formatters)
{ {
return new BodyModelBinder(new TestHttpRequestStreamReaderFactory()); return new BodyModelBinder(formatters, new TestHttpRequestStreamReaderFactory());
} }
private class Person private class Person

View File

@ -115,10 +115,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelName = "foo", ModelName = "foo",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
ValueProvider = valueProvider, ValueProvider = valueProvider,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metadataProvider,
}
}; };
return bindingContext; return bindingContext;
} }

View File

@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Assert // Assert
Assert.NotEqual(default(ModelBindingResult), result); Assert.NotEqual(default(ModelBindingResult), result);
Assert.True(result.IsModelSet); 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) private static DefaultModelBindingContext GetBindingContext(Type modelType)
@ -33,17 +33,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
DefaultModelBindingContext bindingContext = new DefaultModelBindingContext DefaultModelBindingContext bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelMetadata = metadataProvider.GetMetadataForType(modelType),
ModelName = "someName", ModelName = "someName",
ValueProvider = new SimpleValueProvider(), ValueProvider = new SimpleValueProvider(),
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = metadataProvider,
},
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };

View File

@ -187,7 +187,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ "someName", null }, { "someName", null },
}; };
var bindingContext = GetModelBindingContext(valueProvider, isReadOnly: false); var bindingContext = GetModelBindingContext(valueProvider, isReadOnly: false);
var modelState = bindingContext.ModelState;
// Act // Act
var result = await binder.BindModelResultAsync(bindingContext); 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. // Lack of prefix and non-empty model name both ignored.
context.ModelName = "modelName"; context.ModelName = "modelName";
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List<string>)); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List<string>));
context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>());
@ -261,7 +260,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Lack of prefix and non-empty model name both ignored. // Lack of prefix and non-empty model name both ignored.
context.ModelName = "modelName"; context.ModelName = "modelName";
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List<string>)); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(List<string>));
context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>());
@ -289,7 +288,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty"); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty");
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithListProperty), typeof(ModelWithListProperty),
nameof(ModelWithListProperty.ListProperty)); nameof(ModelWithListProperty.ListProperty));
@ -376,10 +375,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelName = "someName", ModelName = "someName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
ValueProvider = valueProvider, ValueProvider = valueProvider,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metadataProvider
},
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
FieldName = "testfieldname", FieldName = "testfieldname",
}; };
@ -413,14 +408,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ {
var modelBindingContext = new DefaultModelBindingContext() var modelBindingContext = new DefaultModelBindingContext()
{ {
OperationBindingContext = new OperationBindingContext() ActionContext = new ActionContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{ },
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = new TestModelMetadataProvider(),
}
}; };
return modelBindingContext; return modelBindingContext;

View File

@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
bindingContext.IsTopLevelObject = false; bindingContext.IsTopLevelObject = false;
bindingContext.ModelName = "SimpleContainer.Simple"; bindingContext.ModelName = "SimpleContainer.Simple";
bindingContext.ValueProvider = valueProvider.Object; bindingContext.ValueProvider = valueProvider.Object;
bindingContext.OperationBindingContext.ValueProvider = valueProvider.Object; bindingContext.OriginalValueProvider = valueProvider.Object;
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -171,7 +171,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = CreateContext(GetMetadataForType(modelType)); var bindingContext = CreateContext(GetMetadataForType(modelType));
bindingContext.IsTopLevelObject = false; bindingContext.IsTopLevelObject = false;
bindingContext.ValueProvider = valueProvider.Object; bindingContext.ValueProvider = valueProvider.Object;
bindingContext.OperationBindingContext.ValueProvider = valueProvider.Object; bindingContext.OriginalValueProvider = valueProvider.Object;
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -206,7 +206,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = CreateContext(GetMetadataForType(modelType)); var bindingContext = CreateContext(GetMetadataForType(modelType));
bindingContext.IsTopLevelObject = false; bindingContext.IsTopLevelObject = false;
bindingContext.ValueProvider = valueProvider.Object; bindingContext.ValueProvider = valueProvider.Object;
bindingContext.OperationBindingContext.ValueProvider = originalValueProvider.Object; bindingContext.OriginalValueProvider = originalValueProvider.Object;
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -239,7 +239,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var bindingContext = CreateContext(GetMetadataForType(modelType)); var bindingContext = CreateContext(GetMetadataForType(modelType));
bindingContext.IsTopLevelObject = false; bindingContext.IsTopLevelObject = false;
bindingContext.ValueProvider = valueProvider.Object; bindingContext.ValueProvider = valueProvider.Object;
bindingContext.OperationBindingContext.ValueProvider = originalValueProvider.Object; bindingContext.OriginalValueProvider = originalValueProvider.Object;
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -268,11 +268,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelMetadata = GetMetadataForType(typeof(Person)), ModelMetadata = GetMetadataForType(typeof(Person)),
ModelName = string.Empty, ModelName = string.Empty,
ValueProvider = mockValueProvider.Object, ValueProvider = mockValueProvider.Object,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = _metadataProvider,
ValidatorProvider = Mock.Of<IModelValidatorProvider>()
},
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
}; };
@ -405,17 +400,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property);
var bindingContext = new DefaultModelBindingContext() var bindingContext = new DefaultModelBindingContext()
{ {
ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
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); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -435,17 +427,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property);
var bindingContext = new DefaultModelBindingContext() var bindingContext = new DefaultModelBindingContext()
{ {
ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
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); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -466,17 +455,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property); var metadata = GetMetadataForProperty(typeof(PersonWithBindExclusion), property);
var bindingContext = new DefaultModelBindingContext() var bindingContext = new DefaultModelBindingContext()
{ {
ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{
HttpContext = new DefaultHttpContext()
{
RequestServices = new ServiceCollection().BuildServiceProvider(),
},
},
}, },
ModelMetadata = GetMetadataForType(typeof(PersonWithBindExclusion)),
}; };
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -499,17 +482,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadata = GetMetadataForProperty(typeof(TypeWithIncludedPropertiesUsingBindAttribute), property); var metadata = GetMetadataForProperty(typeof(TypeWithIncludedPropertiesUsingBindAttribute), property);
var bindingContext = new DefaultModelBindingContext() var bindingContext = new DefaultModelBindingContext()
{ {
ModelMetadata = GetMetadataForType(typeof(TypeWithIncludedPropertiesUsingBindAttribute)), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext()
{
HttpContext = new DefaultHttpContext()
{
RequestServices = new ServiceCollection().BuildServiceProvider(),
},
},
}, },
ModelMetadata = GetMetadataForType(typeof(TypeWithIncludedPropertiesUsingBindAttribute)),
}; };
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -531,17 +508,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadata = GetMetadataForProperty(typeof(ModelWithMixedBindingBehaviors), property); var metadata = GetMetadataForProperty(typeof(ModelWithMixedBindingBehaviors), property);
var bindingContext = new DefaultModelBindingContext() var bindingContext = new DefaultModelBindingContext()
{ {
ModelMetadata = GetMetadataForType(typeof(ModelWithMixedBindingBehaviors)), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{
HttpContext = new DefaultHttpContext()
{
RequestServices = new ServiceCollection().BuildServiceProvider(),
},
},
}, },
ModelMetadata = GetMetadataForType(typeof(ModelWithMixedBindingBehaviors)),
}; };
var binder = CreateBinder(bindingContext.ModelMetadata); var binder = CreateBinder(bindingContext.ModelMetadata);
@ -794,9 +765,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Arrange // Arrange
var model = new Person(); var model = new Person();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = metadata.Properties[nameof(model.PropertyWithDefaultValue)]; var propertyMetadata = metadata.Properties[nameof(model.PropertyWithDefaultValue)];
var result = ModelBindingResult.Failed("foo"); var result = ModelBindingResult.Failed("foo");
@ -817,9 +787,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Arrange // Arrange
var model = new Person(); var model = new Person();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValue)]; var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValue)];
// The null model value won't be used because IsModelBound = false. // The null model value won't be used because IsModelBound = false.
@ -842,9 +811,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Arrange // Arrange
var model = new Person(); var model = new Person();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValueAndDefault)]; var propertyMetadata = metadata.Properties[nameof(model.PropertyWithInitializedValueAndDefault)];
// The null model value won't be used because IsModelBound = false. // The null model value won't be used because IsModelBound = false.
@ -867,9 +835,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Arrange // Arrange
var model = new Person(); var model = new Person();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = metadata.Properties[nameof(model.NonUpdateableProperty)]; var propertyMetadata = metadata.Properties[nameof(model.NonUpdateableProperty)];
var result = ModelBindingResult.Failed("foo"); var result = ModelBindingResult.Failed("foo");
@ -912,8 +879,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var type = model.GetType(); var type = model.GetType();
var bindingContext = CreateContext(GetMetadataForType(type), model); var bindingContext = CreateContext(GetMetadataForType(type), model);
var modelState = bindingContext.ModelState; var modelState = bindingContext.ModelState;
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(type);
var metadata = metadataProvider.GetMetadataForType(type);
var propertyMetadata = bindingContext.ModelMetadata.Properties[propertyName]; var propertyMetadata = bindingContext.ModelMetadata.Properties[propertyName];
var result = ModelBindingResult.Success( var result = ModelBindingResult.Success(
@ -960,9 +926,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Arrange // Arrange
var model = new Person(); var model = new Person();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfBirth)]; var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfBirth)];
var result = ModelBindingResult.Success("foo", new DateTime(2001, 1, 1)); 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 bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(Person));
var metadata = metadataProvider.GetMetadataForType(typeof(Person));
var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfDeath)]; var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.DateOfDeath)];
var result = ModelBindingResult.Success("foo", new DateTime(1800, 1, 1)); 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 model = new ModelWhosePropertySetterThrows();
var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model); var bindingContext = CreateContext(GetMetadataForType(model.GetType()), model);
bindingContext.ModelName = "foo"; bindingContext.ModelName = "foo";
var metadataProvider = bindingContext.OperationBindingContext.MetadataProvider; var metadata = GetMetadataForType(typeof(ModelWhosePropertySetterThrows));
var metadata = metadataProvider.GetMetadataForType(typeof(ModelWhosePropertySetterThrows));
var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.NameNoAttribute)]; var propertyMetadata = bindingContext.ModelMetadata.Properties[nameof(model.NameNoAttribute)];
var result = ModelBindingResult.Success("foo.NameNoAttribute", model: null); var result = ModelBindingResult.Success("foo.NameNoAttribute", model: null);
@ -1068,12 +1031,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelMetadata = metadata, ModelMetadata = metadata,
ModelName = "theModel", ModelName = "theModel",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = _metadataProvider,
ValidatorProvider = TestModelValidatorProvider.CreateDefaultProvider(),
ValueProvider = valueProvider,
},
ValueProvider = valueProvider, ValueProvider = valueProvider,
}; };
} }

View File

@ -137,11 +137,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = modelName; context.ModelName = modelName;
context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); context.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary);
context.ValueProvider = context.OperationBindingContext.ValueProvider;
context.FieldName = modelName; context.FieldName = modelName;
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.DictionaryProperty)); nameof(ModelWithDictionaryProperties.DictionaryProperty));
@ -175,11 +174,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = "prefix"; context.ModelName = "prefix";
context.OperationBindingContext.ValueProvider = CreateTestValueProvider("prefix[{0}]", dictionary); context.ValueProvider = CreateTestValueProvider("prefix[{0}]", dictionary);
context.ValueProvider = context.OperationBindingContext.ValueProvider;
context.FieldName = context.ModelName; context.FieldName = context.ModelName;
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.DictionaryProperty)); nameof(ModelWithDictionaryProperties.DictionaryProperty));
@ -228,12 +226,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = "prefix"; context.ModelName = "prefix";
context.OperationBindingContext.ValueProvider = context.ValueProvider = CreateEnumerableValueProvider("prefix[{0}]", stringDictionary);
CreateEnumerableValueProvider("prefix[{0}]", stringDictionary);
context.ValueProvider = context.OperationBindingContext.ValueProvider;
context.FieldName = context.ModelName; context.FieldName = context.ModelName;
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.DictionaryWithValueTypesProperty)); nameof(ModelWithDictionaryProperties.DictionaryWithValueTypesProperty));
@ -269,11 +265,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = "prefix"; context.ModelName = "prefix";
context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider("{0}", stringDictionary); context.ValueProvider = CreateEnumerableValueProvider("{0}", stringDictionary);
context.ValueProvider = context.OperationBindingContext.ValueProvider;
context.FieldName = context.ModelName; context.FieldName = context.ModelName;
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.DictionaryWithComplexValuesProperty)); nameof(ModelWithDictionaryProperties.DictionaryWithComplexValuesProperty));
@ -328,11 +323,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = modelName; context.ModelName = modelName;
context.OperationBindingContext.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary); context.ValueProvider = CreateEnumerableValueProvider(keyFormat, dictionary);
context.ValueProvider = context.OperationBindingContext.ValueProvider;
context.FieldName = context.ModelName; context.FieldName = context.ModelName;
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.CustomDictionaryProperty)); nameof(ModelWithDictionaryProperties.CustomDictionaryProperty));
@ -363,7 +357,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
// Lack of prefix and non-empty model name both ignored. // Lack of prefix and non-empty model name both ignored.
context.ModelName = "modelName"; context.ModelName = "modelName";
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(Dictionary<string, string>)); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(Dictionary<string, string>));
context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>());
@ -392,7 +386,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty"); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "ListProperty");
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithDictionaryProperties), typeof(ModelWithDictionaryProperties),
nameof(ModelWithDictionaryProperties.DictionaryProperty)); nameof(ModelWithDictionaryProperties.DictionaryProperty));
@ -444,15 +438,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ {
var modelBindingContext = new DefaultModelBindingContext() var modelBindingContext = new DefaultModelBindingContext()
{ {
ModelState = new ModelStateDictionary(), ActionContext = new ActionContext()
OperationBindingContext = new OperationBindingContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = new TestModelMetadataProvider(),
}, },
ModelState = new ModelStateDictionary(),
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };
@ -510,11 +500,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelMetadata = metadata, ModelMetadata = metadata,
ModelName = "someName", ModelName = "someName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metadataProvider,
ValueProvider = valueProvider,
},
ValueProvider = valueProvider, ValueProvider = valueProvider,
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };

View File

@ -74,16 +74,12 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = httpContext,
},
ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelMetadata = metadataProvider.GetMetadataForType(modelType),
ModelName = "file", ModelName = "file",
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = httpContext,
},
MetadataProvider = metadataProvider,
},
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };

View File

@ -254,11 +254,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
metadataProvider metadataProvider
.ForProperty<ModelWithReadOnlyArray>(nameof(ModelWithReadOnlyArray.ArrayProperty)) .ForProperty<ModelWithReadOnlyArray>(nameof(ModelWithReadOnlyArray.ArrayProperty))
.BindingDetails(bd => bd.BindingSource = BindingSource.Header); .BindingDetails(bd => bd.BindingSource = BindingSource.Header);
var modelMetadata = metadataProvider.GetMetadataForProperty( var metadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithReadOnlyArray), typeof(ModelWithReadOnlyArray),
nameof(ModelWithReadOnlyArray.ArrayProperty)); nameof(ModelWithReadOnlyArray.ArrayProperty));
return GetBindingContext(metadataProvider, modelMetadata, httpContext); return GetBindingContext(metadata, httpContext);
} }
private static DefaultModelBindingContext GetBindingContext(Type modelType, HttpContext httpContext) private static DefaultModelBindingContext GetBindingContext(Type modelType, HttpContext httpContext)
@ -266,27 +266,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
var metadata = metadataProvider.GetMetadataForType(modelType); var metadata = metadataProvider.GetMetadataForType(modelType);
return GetBindingContext(metadataProvider, metadata, httpContext); return GetBindingContext(metadata, httpContext);
} }
private static DefaultModelBindingContext GetBindingContext( private static DefaultModelBindingContext GetBindingContext(
IModelMetadataProvider metadataProvider,
ModelMetadata metadata, ModelMetadata metadata,
HttpContext httpContext) HttpContext httpContext)
{ {
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = httpContext,
},
ModelMetadata = metadata, ModelMetadata = metadata,
ModelName = "file", ModelName = "file",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = httpContext,
},
MetadataProvider = metadataProvider,
},
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };

View File

@ -42,7 +42,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var modelBindingContext = GetBindingContext(type); var modelBindingContext = GetBindingContext(type);
modelBindingContext.FieldName = header; modelBindingContext.FieldName = header;
modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue });
// Act // Act
var result = await binder.BindModelResultAsync(modelBindingContext); var result = await binder.BindModelResultAsync(modelBindingContext);
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var modelBindingContext = GetBindingContext(type); var modelBindingContext = GetBindingContext(type);
modelBindingContext.FieldName = header; modelBindingContext.FieldName = header;
modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue });
// Act // Act
var result = await binder.BindModelResultAsync(modelBindingContext); var result = await binder.BindModelResultAsync(modelBindingContext);
@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var modelBindingContext = GetBindingContext(destinationType); var modelBindingContext = GetBindingContext(destinationType);
modelBindingContext.FieldName = header; modelBindingContext.FieldName = header;
modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue });
// Act // Act
var result = await binder.BindModelResultAsync(modelBindingContext); var result = await binder.BindModelResultAsync(modelBindingContext);
@ -111,7 +111,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var modelBindingContext = GetBindingContextForReadOnlyArray(); var modelBindingContext = GetBindingContextForReadOnlyArray();
modelBindingContext.FieldName = header; modelBindingContext.FieldName = header;
modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue });
// Act // Act
var result = await binder.BindModelResultAsync(modelBindingContext); var result = await binder.BindModelResultAsync(modelBindingContext);
@ -133,7 +133,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var modelBindingContext = GetBindingContext(typeof(ISet<string>)); var modelBindingContext = GetBindingContext(typeof(ISet<string>));
modelBindingContext.FieldName = header; modelBindingContext.FieldName = header;
modelBindingContext.OperationBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue }); modelBindingContext.HttpContext.Request.Headers.Add(header, new[] { headerValue });
// Act // Act
var result = await binder.BindModelResultAsync(modelBindingContext); var result = await binder.BindModelResultAsync(modelBindingContext);
@ -173,18 +173,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ {
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
ModelMetadata = modelMetadata, ModelMetadata = modelMetadata,
ModelName = "modelName", ModelName = "modelName",
FieldName = "modelName", FieldName = "modelName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = metadataProvider,
},
BinderModelName = modelMetadata.BinderModelName, BinderModelName = modelMetadata.BinderModelName,
BindingSource = modelMetadata.BindingSource, BindingSource = modelMetadata.BindingSource,
}; };

View File

@ -106,16 +106,16 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
ModelBindingResult? innerResult; ModelBindingResult? innerResult;
if (isSuccess) if (isSuccess)
{ {
innerResult = ModelBindingResult.Success("somename.key", model); innerResult = ModelBindingResult.Success("somename.Key", model);
} }
else else
{ {
innerResult = ModelBindingResult.Failed("somename.key"); innerResult = ModelBindingResult.Failed("somename.Key");
} }
var innerBinder = new StubModelBinder(context => var innerBinder = new StubModelBinder(context =>
{ {
Assert.Equal("someName.key", context.ModelName); Assert.Equal("someName.Key", context.ModelName);
return innerResult; return innerResult;
}); });
@ -125,7 +125,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var binder = new KeyValuePairModelBinder<int, string>(innerBinder, innerBinder); var binder = new KeyValuePairModelBinder<int, string>(innerBinder, innerBinder);
// Act // Act
var result = await binder.TryBindStrongModel<int>(bindingContext, innerBinder, "key"); var result = await binder.TryBindStrongModel<int>(bindingContext, innerBinder, "Key");
// Assert // Assert
Assert.Equal(innerResult.Value, result); 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. // Lack of prefix and non-empty model name both ignored.
context.ModelName = "modelName"; context.ModelName = "modelName";
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(KeyValuePair<string, string>)); context.ModelMetadata = metadataProvider.GetMetadataForType(typeof(KeyValuePair<string, string>));
context.ValueProvider = new TestValueProvider(new Dictionary<string, object>()); context.ValueProvider = new TestValueProvider(new Dictionary<string, object>());
@ -176,7 +176,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
var context = CreateContext(); var context = CreateContext();
context.ModelName = ModelNames.CreatePropertyModelName(prefix, "KeyValuePairProperty"); context.ModelName = ModelNames.CreatePropertyModelName(prefix, "KeyValuePairProperty");
var metadataProvider = context.OperationBindingContext.MetadataProvider; var metadataProvider = new TestModelMetadataProvider();
context.ModelMetadata = metadataProvider.GetMetadataForProperty( context.ModelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithKeyValuePairProperty), typeof(ModelWithKeyValuePairProperty),
nameof(ModelWithKeyValuePairProperty.KeyValuePairProperty)); nameof(ModelWithKeyValuePairProperty.KeyValuePairProperty));
@ -194,13 +194,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
{ {
var modelBindingContext = new DefaultModelBindingContext() var modelBindingContext = new DefaultModelBindingContext()
{ {
OperationBindingContext = new OperationBindingContext() ActionContext = new ActionContext()
{ {
ActionContext = new ActionContext() HttpContext = new DefaultHttpContext(),
{
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = new TestModelMetadataProvider(),
}, },
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
}; };
@ -212,21 +208,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
IValueProvider valueProvider, IValueProvider valueProvider,
Type keyValuePairType) Type keyValuePairType)
{ {
var metataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new TestModelMetadataProvider();
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ModelMetadata = metataProvider.GetMetadataForType(keyValuePairType), ModelMetadata = metadataProvider.GetMetadataForType(keyValuePairType),
ModelName = "someName", ModelName = "someName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
ValueProvider = valueProvider, ValueProvider = valueProvider,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metataProvider,
ValidatorProvider = new DataAnnotationsModelValidatorProvider(
new ValidationAttributeAdapterProvider(),
new TestOptionsManager<MvcDataAnnotationsLocalizationOptions>(),
stringLocalizerFactory: null)
}
}; };
return bindingContext; return bindingContext;
} }

View File

@ -42,27 +42,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
metadataProvider.ForType(modelType).BindingDetails(d => d.BindingSource = BindingSource.Services); metadataProvider.ForType(modelType).BindingDetails(d => d.BindingSource = BindingSource.Services);
var modelMetadata = metadataProvider.GetMetadataForType(modelType); var modelMetadata = metadataProvider.GetMetadataForType(modelType);
var services = new ServiceCollection(); var services = new ServiceCollection();
services.AddSingleton<IService>(new Service()); services.AddSingleton<IService>(new Service());
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext()
{
RequestServices = services.BuildServiceProvider(),
}
},
ModelMetadata = modelMetadata, ModelMetadata = modelMetadata,
ModelName = "modelName", ModelName = "modelName",
FieldName = "modelName", FieldName = "modelName",
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext()
{
RequestServices = services.BuildServiceProvider(),
}
},
MetadataProvider = metadataProvider,
},
BinderModelName = modelMetadata.BinderModelName, BinderModelName = modelMetadata.BinderModelName,
BindingSource = modelMetadata.BindingSource, BindingSource = modelMetadata.BindingSource,
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),

View File

@ -25,26 +25,23 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
Model = new object(), Model = new object(),
ModelMetadata = new TestModelMetadataProvider().GetMetadataForType(typeof(object)), ModelMetadata = new TestModelMetadataProvider().GetMetadataForType(typeof(object)),
ModelName = "theName", ModelName = "theName",
OperationBindingContext = new OperationBindingContext(),
ValueProvider = new SimpleValueProvider(), ValueProvider = new SimpleValueProvider(),
ModelState = new ModelStateDictionary(), ModelState = new ModelStateDictionary(),
}; };
var metadataProvider = new TestModelMetadataProvider(); var metadataProvider = new TestModelMetadataProvider();
metadataProvider.ForType<object>().BindingDetails(d => metadataProvider.ForType<object>().BindingDetails(d =>
{ {
d.BindingSource = BindingSource.Custom; d.BindingSource = BindingSource.Custom;
d.BinderType = typeof(TestModelBinder); d.BinderType = typeof(TestModelBinder);
d.BinderModelName = "custom"; d.BinderModelName = "custom";
}); });
var newModelMetadata = metadataProvider.GetMetadataForType(typeof(object)); var newModelMetadata = metadataProvider.GetMetadataForType(typeof(object));
// Act // Act
var originalBinderModelName = bindingContext.BinderModelName; var originalBinderModelName = bindingContext.BinderModelName;
var originalBindingSource = bindingContext.BindingSource; var originalBindingSource = bindingContext.BindingSource;
var originalModelState = bindingContext.ModelState;
var originalOperationBindingContext = bindingContext.OperationBindingContext;
var originalValueProvider = bindingContext.ValueProvider; var originalValueProvider = bindingContext.ValueProvider;
var disposable = bindingContext.EnterNestedScope( var disposable = bindingContext.EnterNestedScope(
@ -61,8 +58,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
Assert.Null(bindingContext.Model); Assert.Null(bindingContext.Model);
Assert.Same(newModelMetadata, bindingContext.ModelMetadata); Assert.Same(newModelMetadata, bindingContext.ModelMetadata);
Assert.Equal("modelprefix.fieldName", bindingContext.ModelName); Assert.Equal("modelprefix.fieldName", bindingContext.ModelName);
Assert.Same(originalModelState, bindingContext.ModelState);
Assert.Same(originalOperationBindingContext, bindingContext.OperationBindingContext);
Assert.Same(originalValueProvider, bindingContext.ValueProvider); Assert.Same(originalValueProvider, bindingContext.ValueProvider);
disposable.Dispose(); disposable.Dispose();
@ -75,15 +70,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var metadataProvider = new TestModelMetadataProvider(); var metadataProvider = new TestModelMetadataProvider();
var original = CreateDefaultValueProvider(); var original = CreateDefaultValueProvider();
var operationBindingContext = new OperationBindingContext()
{
ActionContext = new ActionContext(),
ValueProvider = original,
};
// Act // Act
var context = DefaultModelBindingContext.CreateBindingContext( var context = DefaultModelBindingContext.CreateBindingContext(
operationBindingContext, new ActionContext(),
original,
metadataProvider.GetMetadataForType(typeof(object)), metadataProvider.GetMetadataForType(typeof(object)),
new BindingInfo() { BindingSource = BindingSource.Query }, new BindingInfo() { BindingSource = BindingSource.Query },
"model"); "model");
@ -104,14 +95,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
.BindingDetails(b => b.BindingSource = BindingSource.Query); .BindingDetails(b => b.BindingSource = BindingSource.Query);
var original = CreateDefaultValueProvider(); var original = CreateDefaultValueProvider();
var operationBindingContext = new OperationBindingContext()
{
ActionContext = new ActionContext(),
ValueProvider = original,
};
var context = DefaultModelBindingContext.CreateBindingContext( var context = DefaultModelBindingContext.CreateBindingContext(
operationBindingContext, new ActionContext(),
original,
metadataProvider.GetMetadataForType(typeof(string)), metadataProvider.GetMetadataForType(typeof(string)),
new BindingInfo(), new BindingInfo(),
"model"); "model");
@ -137,14 +123,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
.BindingDetails(b => b.BindingSource = BindingSource.Form); .BindingDetails(b => b.BindingSource = BindingSource.Form);
var original = CreateDefaultValueProvider(); var original = CreateDefaultValueProvider();
var operationBindingContext = new OperationBindingContext()
{
ActionContext = new ActionContext(),
ValueProvider = original,
};
var context = DefaultModelBindingContext.CreateBindingContext( var context = DefaultModelBindingContext.CreateBindingContext(
operationBindingContext, new ActionContext(),
original,
metadataProvider.GetMetadataForType(typeof(string)), metadataProvider.GetMetadataForType(typeof(string)),
new BindingInfo() { BindingSource = BindingSource.Query }, new BindingInfo() { BindingSource = BindingSource.Query },
"model"); "model");

View File

@ -52,9 +52,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binder), GetModelBinderFactory(binder),
Mock.Of<IValueProvider>(), Mock.Of<IValueProvider>(),
new List<IInputFormatter>(), new Mock<IObjectModelValidator>(MockBehavior.Strict).Object);
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
Mock.Of<IModelValidatorProvider>());
// Assert // Assert
Assert.False(result); Assert.False(result);
@ -84,7 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
{ "", null } { "", null }
}; };
var valueProvider = new TestValueProvider(values); var valueProvider = new TestValueProvider(values);
var modelMetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(); var metadataProvider = TestModelMetadataProvider.CreateDefaultProvider();
var actionContext = new ActionContext() { HttpContext = new DefaultHttpContext() }; var actionContext = new ActionContext() { HttpContext = new DefaultHttpContext() };
var modelState = actionContext.ModelState; var modelState = actionContext.ModelState;
@ -94,12 +92,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
model, model,
"", "",
actionContext, actionContext,
modelMetadataProvider, metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }));
new DefaultObjectValidator(modelMetadataProvider, new ValidatorCache()),
validator);
// Assert // Assert
Assert.False(result); Assert.False(result);
@ -139,9 +135,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }));
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -167,9 +161,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binder), GetModelBinderFactory(binder),
Mock.Of<IValueProvider>(), Mock.Of<IValueProvider>(),
new List<IInputFormatter>(),
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object, new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
Mock.Of<IModelValidatorProvider>(),
propertyFilter); propertyFilter);
// Assert // Assert
@ -223,9 +215,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }),
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator,
propertyFilter); propertyFilter);
// Assert // Assert
@ -253,9 +243,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binder), GetModelBinderFactory(binder),
Mock.Of<IValueProvider>(), Mock.Of<IValueProvider>(),
new List<IInputFormatter>(),
new Mock<IObjectModelValidator>(MockBehavior.Strict).Object, new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
Mock.Of<IModelValidatorProvider>(),
m => m.IncludedProperty); m => m.IncludedProperty);
// Assert // Assert
@ -305,9 +293,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
TestModelMetadataProvider.CreateDefaultProvider(), TestModelMetadataProvider.CreateDefaultProvider(),
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }),
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator,
m => m.IncludedProperty, m => m.IncludedProperty,
m => m.MyProperty); m => m.MyProperty);
@ -358,9 +344,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }));
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator);
// Assert // Assert
// Includes everything. // Includes everything.
@ -509,9 +493,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider: metadataProvider, metadataProvider: metadataProvider,
modelBinderFactory: GetModelBinderFactory(binder), modelBinderFactory: GetModelBinderFactory(binder),
valueProvider: Mock.Of<IValueProvider>(), valueProvider: Mock.Of<IValueProvider>(),
inputFormatters: new List<IInputFormatter>(),
objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object, objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
validatorProvider: Mock.Of<IModelValidatorProvider>(),
propertyFilter: propertyFilter); propertyFilter: propertyFilter);
// Assert // Assert
@ -566,9 +548,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }),
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator,
propertyFilter); propertyFilter);
// Assert // Assert
@ -598,9 +578,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider: metadataProvider, metadataProvider: metadataProvider,
modelBinderFactory: GetModelBinderFactory(binder.Object), modelBinderFactory: GetModelBinderFactory(binder.Object),
valueProvider: Mock.Of<IValueProvider>(), valueProvider: Mock.Of<IValueProvider>(),
inputFormatters: new List<IInputFormatter>(), objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object);
objectModelValidator: new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
validatorProvider: Mock.Of<IModelValidatorProvider>());
// Assert // Assert
Assert.False(result); Assert.False(result);
@ -637,12 +615,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
model.GetType(), model.GetType(),
"", "",
new ActionContext() { HttpContext = new DefaultHttpContext() }, new ActionContext() { HttpContext = new DefaultHttpContext() },
TestModelMetadataProvider.CreateDefaultProvider(), metadataProvider,
GetModelBinderFactory(binderProviders), GetModelBinderFactory(binderProviders),
valueProvider, valueProvider,
new List<IInputFormatter>(), new DefaultObjectValidator(metadataProvider, new[] { validator }));
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
validator);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -669,9 +645,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider, metadataProvider,
GetModelBinderFactory(binder.Object), GetModelBinderFactory(binder.Object),
Mock.Of<IValueProvider>(), Mock.Of<IValueProvider>(),
new List<IInputFormatter>(), new Mock<IObjectModelValidator>(MockBehavior.Strict).Object,
new DefaultObjectValidator(metadataProvider, new ValidatorCache()),
Mock.Of<IModelValidatorProvider>(),
propertyFilter)); propertyFilter));
var expectedMessage = string.Format("The model's runtime type '{0}' is not assignable to the type '{1}'." + 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( var modelMetadata = metadataProvider.GetMetadataForProperty(
typeof(ModelWithReadOnlyAndSpecialCaseProperties), typeof(ModelWithReadOnlyAndSpecialCaseProperties),
propertyName); propertyName);
var bindingContext = GetBindingContext(metadataProvider, modelMetadata); var bindingContext = GetBindingContext(modelMetadata);
var container = new ModelWithReadOnlyAndSpecialCaseProperties(); var container = new ModelWithReadOnlyAndSpecialCaseProperties();
bindingContext.Model = modelMetadata.PropertyGetter(container); bindingContext.Model = modelMetadata.PropertyGetter(container);
@ -1560,20 +1534,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
var metadata = metadataProvider.GetMetadataForType(modelType); var metadata = metadataProvider.GetMetadataForType(modelType);
return GetBindingContext(metadataProvider, metadata); return GetBindingContext(metadata);
} }
private static DefaultModelBindingContext GetBindingContext( private static DefaultModelBindingContext GetBindingContext(ModelMetadata metadata)
IModelMetadataProvider metadataProvider,
ModelMetadata metadata)
{ {
var bindingContext = new DefaultModelBindingContext var bindingContext = new DefaultModelBindingContext
{ {
ModelMetadata = metadata, ModelMetadata = metadata,
OperationBindingContext = new OperationBindingContext
{
MetadataProvider = metadataProvider,
},
}; };
return bindingContext; return bindingContext;

View File

@ -40,16 +40,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person3) ParameterType = typeof(Person3)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person3(); var model = new Person3();
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -86,15 +86,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "prefix", Name = "prefix",
ParameterType = typeof(Person6) ParameterType = typeof(Person6)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -134,16 +134,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person4) ParameterType = typeof(Person4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person4(); var model = new Person4();
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -182,14 +182,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person5) ParameterType = typeof(Person5)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -222,15 +222,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person3) ParameterType = typeof(Person3)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -266,15 +266,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}, },
ParameterType = typeof(Person6) ParameterType = typeof(Person6)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -313,15 +313,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person4) ParameterType = typeof(Person4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -358,15 +358,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person5) ParameterType = typeof(Person5)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -23,15 +23,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(int[]) ParameterType = typeof(int[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0]=10&parameter[1]=11"); request.QueryString = new QueryString("?parameter[0]=10&parameter[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -67,15 +67,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(int[]) ParameterType = typeof(int[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?prefix[0]=10&prefix[1]=11"); request.QueryString = new QueryString("?prefix[0]=10&prefix[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -107,15 +107,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(int[]) ParameterType = typeof(int[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?[0]=10&[1]=11"); request.QueryString = new QueryString("?[0]=10&[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -147,15 +147,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(int[]) ParameterType = typeof(int[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -182,15 +182,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person[]) ParameterType = typeof(Person[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Name=bill&parameter[1].Name=lang"); request.QueryString = new QueryString("?parameter[0].Name=bill&parameter[1].Name=lang");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -227,15 +227,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person[]) 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"); request.QueryString = new QueryString("?prefix[0].Name=bill&prefix[1].Name=lang");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -268,15 +268,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person[]) ParameterType = typeof(Person[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?[0].Name=bill&[1].Name=lang"); request.QueryString = new QueryString("?[0].Name=bill&[1].Name=lang");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -309,15 +309,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person[]) ParameterType = typeof(Person[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -32,11 +32,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -66,11 +66,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext);
// Assert // Assert
Assert.False(modelBindingResult.Value.IsModelSet); Assert.False(modelBindingResult.Value.IsModelSet);
@ -101,11 +101,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext);
// Assert // Assert
@ -137,11 +137,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext);
// Assert // Assert
@ -172,11 +172,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person2) ParameterType = typeof(Person2)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -215,11 +215,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -255,11 +255,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert

View File

@ -45,17 +45,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
} }
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json;charset=utf-8"; request.ContentType = "application/json;charset=utf-8";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json;charset=utf-8"; request.ContentType = "application/json;charset=utf-8";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinding.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var result = await argumentBinding.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -120,17 +120,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ProductViewModel) ParameterType = typeof(ProductViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -172,17 +172,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ProductViewModel) ParameterType = typeof(ProductViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -213,17 +213,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ProductViewModel) ParameterType = typeof(ProductViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -253,17 +253,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(SoftwareViewModel) ParameterType = typeof(SoftwareViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -289,17 +289,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(SoftwareViewModel) ParameterType = typeof(SoftwareViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -332,17 +332,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(SoftwareViewModel) ParameterType = typeof(SoftwareViewModel)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(input));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -369,17 +369,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -409,18 +409,18 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -452,17 +452,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person4) ParameterType = typeof(Person4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(string.Empty));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -511,17 +511,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person5) ParameterType = typeof(Person5)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": 5 }")); request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": 5 }"));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -549,17 +549,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person5) ParameterType = typeof(Person5)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": \"not a number\" }")); request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ \"Number\": \"not a number\" }"));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -613,17 +613,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "param-name", Name = "param-name",
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -671,16 +671,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "param-name", Name = "param-name",
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText)); request.Body = new MemoryStream(Encoding.UTF8.GetBytes(inputText));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -37,15 +37,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
// any valid base64 string // any valid base64 string
var expectedValue = new byte[] { 12, 13 }; var expectedValue = new byte[] { 12, 13 };
var value = Convert.ToBase64String(expectedValue); var value = Convert.ToBase64String(expectedValue);
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = QueryString.Create(queryStringKey, value); request.QueryString = QueryString.Create(queryStringKey, value);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -86,11 +86,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -120,16 +120,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
// any valid base64 string // any valid base64 string
var value = "four"; var value = "four";
var expectedValue = Convert.FromBase64String(value); var expectedValue = Convert.FromBase64String(value);
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = QueryString.Create("CustomParameter", value); request.QueryString = QueryString.Create("CustomParameter", value);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert

View File

@ -36,11 +36,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -70,11 +70,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -107,11 +107,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(CancellationToken) ParameterType = typeof(CancellationToken)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert

View File

@ -31,15 +31,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<int>) ParameterType = typeof(List<int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0]=10&parameter[1]=11"); request.QueryString = new QueryString("?parameter[0]=10&parameter[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -77,15 +77,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<int>) ParameterType = typeof(List<int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -111,15 +111,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<int>) ParameterType = typeof(ICollection<int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -143,15 +143,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<int>) ParameterType = typeof(List<int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -182,15 +182,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person>) ParameterType = typeof(List<Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -221,15 +221,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person>) ParameterType = typeof(List<Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -254,15 +254,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person>) ParameterType = typeof(List<Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -292,15 +292,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person2>) ParameterType = typeof(List<Person2>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Id=10&parameter[1].Id=11"); request.QueryString = new QueryString("?parameter[0].Id=10&parameter[1].Id=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -351,15 +351,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person2>) ParameterType = typeof(List<Person2>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?prefix[0].Id=10&prefix[1].Id=11"); request.QueryString = new QueryString("?prefix[0].Id=10&prefix[1].Id=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -402,15 +402,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<Person2>) ParameterType = typeof(ICollection<Person2>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?[0].Id=10&[1].Id=11"); request.QueryString = new QueryString("?[0].Id=10&[1].Id=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -453,16 +453,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<int>) ParameterType = typeof(List<int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = request.QueryString =
new QueryString("?parameter.index=low&parameter.index=high&parameter[low]=10&parameter[high]=11"); new QueryString("?parameter.index=low&parameter.index=high&parameter[low]=10&parameter[high]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -497,15 +497,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<Person2>) ParameterType = typeof(ICollection<Person2>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?index=low&index=high&[high].Id=11&[low].Id=10"); request.QueryString = new QueryString("?index=low&index=high&[high].Id=11&[low].Id=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -548,15 +548,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Person2>) ParameterType = typeof(List<Person2>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -590,7 +590,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person4) ParameterType = typeof(Person4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
var formCollection = new FormCollection(new Dictionary<string, StringValues>() var formCollection = new FormCollection(new Dictionary<string, StringValues>()
{ {
@ -603,10 +603,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
request.ContentType = "application/x-www-form-urlencoded"; request.ContentType = "application/x-www-form-urlencoded";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -648,7 +648,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person5) ParameterType = typeof(Person5)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
var formCollection = new FormCollection(new Dictionary<string, StringValues>() var formCollection = new FormCollection(new Dictionary<string, StringValues>()
{ {
@ -660,10 +660,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
request.ContentType = "application/x-www-form-urlencoded"; request.ContentType = "application/x-www-form-urlencoded";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -694,15 +694,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<Address5>), ParameterType = typeof(ICollection<Address5>),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -919,14 +919,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.Form = new FormCollection(formContent); request.Form = new FormCollection(formContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -27,15 +27,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Key=key0&parameter[0].Value=10"); request.QueryString = new QueryString("?parameter[0].Key=key0&parameter[0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -67,15 +67,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[key0]=10"); request.QueryString = new QueryString("?parameter[key0]=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -104,16 +104,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = request.QueryString =
new QueryString("?parameter.index=low&parameter[low].Key=key0&parameter[low].Value=10"); new QueryString("?parameter.index=low&parameter[low].Key=key0&parameter[low].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -156,15 +156,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -191,15 +191,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -223,15 +223,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>) ParameterType = typeof(Dictionary<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -284,15 +284,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, Person>) ParameterType = typeof(Dictionary<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -324,15 +324,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, Person>) ParameterType = typeof(Dictionary<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -363,15 +363,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, Person>) ParameterType = typeof(Dictionary<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -403,15 +403,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, Person>) ParameterType = typeof(Dictionary<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -515,14 +515,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString(queryString); request.QueryString = new QueryString(queryString);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -36,25 +36,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(TypesBundle), ParameterType = typeof(TypesBundle),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.Form = new FormCollection(new Dictionary<string, StringValues> request.Form = new FormCollection(new Dictionary<string, StringValues>
{ {
{ "name", new[] { "Fred" } }, { "name", new[] { "Fred" } },
{ "type", new[] { "SomeType" } }, { "type", new[] { "SomeType" } },
{ "typeArray", new[] { "SomeType1", "SomeType2" } }, { "typeArray", new[] { "SomeType1", "SomeType2" } },
{ "typeList", new[] { "SomeType1", "SomeType2" } }, { "typeList", new[] { "SomeType1", "SomeType2" } },
{ "typeDictionary", new[] { "parameter[0].Key=key", "parameter[0].Value=value" } }, { "typeDictionary", new[] { "parameter[0].Key=key", "parameter[0].Value=value" } },
{ "methodInfo", new[] { "value" } }, { "methodInfo", new[] { "value" } },
{ "func", new[] { "value" } }, { "func", new[] { "value" } },
} });
);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert

View File

@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "Some Data Is Better Than No Data."; var data = "Some Data Is Better Than No Data.";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = QueryString.Create("Address.Zip", "12345"); request.QueryString = QueryString.Create("Address.Zip", "12345");
UpdateRequest(request, data, "Address.File"); UpdateRequest(request, data, "Address.File");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -92,16 +92,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "Some Data Is Better Than No Data."; var data = "Some Data Is Better Than No Data.";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
UpdateRequest(request, data, "CustomParameter"); UpdateRequest(request, data, "CustomParameter");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -136,12 +136,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert

View File

@ -41,17 +41,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "Some Data Is Better Than No Data."; var data = "Some Data Is Better Than No Data.";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = QueryString.Create("Address.Zip", "12345"); request.QueryString = QueryString.Create("Address.Zip", "12345");
UpdateRequest(request, data, "Address.File"); UpdateRequest(request, data, "Address.File");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -95,12 +95,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "some data"; var data = "some data";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => UpdateRequest(request, data, "files")); request => UpdateRequest(request, data, "files"));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var result = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert
@ -141,12 +141,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ListContainer1), ParameterType = typeof(ListContainer1),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => UpdateRequest(request, data: null, name: null)); request => UpdateRequest(request, data: null, name: null));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var result = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert
@ -186,12 +186,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "some data"; var data = "some data";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => UpdateRequest(request, data, "files")); request => UpdateRequest(request, data, "files"));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var result = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert
@ -237,16 +237,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var data = "Some Data Is Better Than No Data."; var data = "Some Data Is Better Than No Data.";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
UpdateRequest(request, data, "CustomParameter"); UpdateRequest(request, data, "CustomParameter");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -286,13 +286,13 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No data is passed. // No data is passed.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => UpdateRequest(request, data: null, name: null)); request => UpdateRequest(request, data: null, name: null));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext);
// Assert // Assert
Assert.False(modelBindingResult.Value.IsModelSet); Assert.False(modelBindingResult.Value.IsModelSet);

View File

@ -34,15 +34,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Need to have a key here so that the GenericModelBinder will recurse to bind elements. // 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"); request.QueryString = new QueryString("?parameter.index=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -72,15 +72,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<IFormCollection>) ParameterType = typeof(List<IFormCollection>)
}; };
// Need to have a key here so that the GenericModelBinder will recurse to bind elements. // 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"); request.QueryString = new QueryString("?index=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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")); request => request.QueryString = new QueryString("?parameter.index=0"));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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")); request => request.QueryString = new QueryString("?parameter.index=0"));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -272,15 +272,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>[]) ParameterType = typeof(Dictionary<string, int>[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0][0].Key=key0&parameter[0][0].Value=10"); request.QueryString = new QueryString("?parameter[0][0].Key=key0&parameter[0][0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -317,15 +317,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>[]) ParameterType = typeof(Dictionary<string, int>[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?[0][0].Key=key0&[0][0].Value=10"); request.QueryString = new QueryString("?[0][0].Key=key0&[0][0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -362,15 +362,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, int>[]) ParameterType = typeof(Dictionary<string, int>[])
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -397,15 +397,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<KeyValuePair<string, int>>) ParameterType = typeof(ICollection<KeyValuePair<string, int>>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Key=key0&parameter[0].Value=10"); request.QueryString = new QueryString("?parameter[0].Key=key0&parameter[0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -441,15 +441,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<KeyValuePair<string, int>>) ParameterType = typeof(ICollection<KeyValuePair<string, int>>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?[0].Key=key0&[0].Value=10"); request.QueryString = new QueryString("?[0].Key=key0&[0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -485,15 +485,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ICollection<KeyValuePair<string, int>>) ParameterType = typeof(ICollection<KeyValuePair<string, int>>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -520,16 +520,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, List<int>>) ParameterType = typeof(Dictionary<string, List<int>>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString( request.QueryString = new QueryString(
"?parameter[0].Key=key0&parameter[0].Value[0]=10&parameter[0].Value[1]=11"); "?parameter[0].Key=key0&parameter[0].Value[0]=10&parameter[0].Value[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -569,15 +569,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, List<int>>) ParameterType = typeof(Dictionary<string, List<int>>)
}; };
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"); 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 // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -617,15 +617,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Dictionary<string, List<int>>) ParameterType = typeof(Dictionary<string, List<int>>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -43,11 +43,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Do not add any headers. // Do not add any headers.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -82,12 +82,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request.Headers.Add("Header", new[] { "someValue" })); request => request.Headers.Add("Header", new[] { "someValue" }));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -124,12 +124,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request.Headers.Add("Header", new[] { "someValue" })); request => request.Headers.Add("Header", new[] { "someValue" }));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -170,12 +170,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ListContainer1), ParameterType = typeof(ListContainer1),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request.Headers.Add("Header", new[] { "someValue" })); request => request.Headers.Add("Header", new[] { "someValue" }));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var result = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert
@ -218,12 +218,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(ListContainer2), ParameterType = typeof(ListContainer2),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request.Headers.Add("Header", new[] { "someValue" })); request => request.Headers.Add("Header", new[] { "someValue" }));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var result = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var result = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert
@ -280,14 +280,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
Action<HttpRequest> action = r => r.Headers.Add("CustomParameter", new[] { value }); Action<HttpRequest> action = r => r.Headers.Add("CustomParameter", new[] { value });
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(action); var testContext = ModelBindingTestHelper.GetTestContext(action);
// Do not add any headers. // Do not add any headers.
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert

View File

@ -25,15 +25,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Key=key0&parameter.Value=10"); request.QueryString = new QueryString("?parameter.Key=key0&parameter.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -64,14 +64,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "parameter", Name = "parameter",
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Value=10"); request.QueryString = new QueryString("?parameter.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.False(modelBindingResult.IsModelSet); Assert.False(modelBindingResult.IsModelSet);
@ -110,14 +110,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "parameter", Name = "parameter",
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Value=10"); request.QueryString = new QueryString("?parameter.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.False(modelBindingResult.IsModelSet); Assert.False(modelBindingResult.IsModelSet);
@ -147,14 +147,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "parameter", Name = "parameter",
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Key=10"); request.QueryString = new QueryString("?parameter.Key=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.False(modelBindingResult.IsModelSet); Assert.False(modelBindingResult.IsModelSet);
@ -194,14 +194,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Name = "parameter", Name = "parameter",
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Key=10"); request.QueryString = new QueryString("?parameter.Key=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.False(modelBindingResult.IsModelSet); Assert.False(modelBindingResult.IsModelSet);
@ -236,15 +236,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value=10"); request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -276,15 +276,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Key=key0&Value=10"); request.QueryString = new QueryString("?Key=key0&Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -316,15 +316,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, int>) ParameterType = typeof(KeyValuePair<string, int>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -352,15 +352,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, Person>) ParameterType = typeof(KeyValuePair<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Key=key0&parameter.Value.Id=10"); request.QueryString = new QueryString("?parameter.Key=key0&parameter.Value.Id=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -397,15 +397,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, Person>) ParameterType = typeof(KeyValuePair<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value.Id=10"); request.QueryString = new QueryString("?prefix.Key=key0&prefix.Value.Id=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -438,15 +438,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, Person>) ParameterType = typeof(KeyValuePair<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Key=key0&Value.Id=10"); request.QueryString = new QueryString("?Key=key0&Value.Id=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -479,15 +479,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(KeyValuePair<string, Person>) ParameterType = typeof(KeyValuePair<string, Person>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -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; }
}
}

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System; using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
@ -18,7 +19,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
{ {
public static class ModelBindingTestHelper public static class ModelBindingTestHelper
{ {
public static OperationBindingContext GetOperationBindingContext( public static ModelBindingTestContext GetTestContext(
Action<HttpRequest> updateRequest = null, Action<HttpRequest> updateRequest = null,
Action<MvcOptions> updateOptions = null, Action<MvcOptions> updateOptions = null,
ControllerActionDescriptor actionDescriptor = null) ControllerActionDescriptor actionDescriptor = null)
@ -26,21 +27,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var httpContext = GetHttpContext(updateRequest, updateOptions); var httpContext = GetHttpContext(updateRequest, updateOptions);
var services = httpContext.RequestServices; var services = httpContext.RequestServices;
actionDescriptor = actionDescriptor ?? new ControllerActionDescriptor(); var context = new ModelBindingTestContext()
var actionContext = new ActionContext(httpContext, new RouteData(), actionDescriptor);
var controllerContext = GetControllerContext(
services.GetRequiredService<IOptions<MvcOptions>>().Value,
actionContext);
return new OperationBindingContext()
{ {
ActionContext = controllerContext, ActionDescriptor = actionDescriptor ?? new ControllerActionDescriptor(),
InputFormatters = controllerContext.InputFormatters, HttpContext = httpContext,
MetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(), MetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(),
ValidatorProvider = new CompositeModelValidatorProvider(controllerContext.ValidatorProviders), RouteData = new RouteData(),
ValueProvider = new CompositeValueProvider(controllerContext.ValueProviders),
}; };
var options = services.GetRequiredService<IOptions<MvcOptions>>();
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( public static ControllerArgumentBinder GetArgumentBinder(
@ -74,12 +78,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
return new ControllerArgumentBinder( return new ControllerArgumentBinder(
metadataProvider, metadataProvider,
new ModelBinderFactory(metadataProvider, options), new ModelBinderFactory(metadataProvider, options),
GetObjectValidator(metadataProvider)); GetObjectValidator(metadataProvider, options));
} }
public static IObjectModelValidator GetObjectValidator(IModelMetadataProvider metadataProvider) public static IObjectModelValidator GetObjectValidator(
IModelMetadataProvider metadataProvider,
IOptions<MvcOptions> options = null)
{ {
return new DefaultObjectValidator(metadataProvider, new ValidatorCache()); IList<IModelValidatorProvider> validatorProviders;
if (options == null)
{
validatorProviders = TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders;
}
else
{
validatorProviders = options.Value.ModelValidatorProviders;
}
return new DefaultObjectValidator(metadataProvider, validatorProviders);
} }
private static HttpContext GetHttpContext( private static HttpContext GetHttpContext(
@ -124,8 +140,6 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
return new ControllerContext(context) return new ControllerContext(context)
{ {
InputFormatters = options.InputFormatters,
ValidatorProviders = options.ModelValidatorProviders,
ValueProviders = valueProviderFactoryContext.ValueProviders ValueProviders = valueProviderFactoryContext.ValueProviders
}; };
} }

View File

@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person1), ParameterType = typeof(Person1),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
// This will cause selection of the "parameter" prefix. // This will cause selection of the "parameter" prefix.
request.QueryString = new QueryString("?parameter="); request.QueryString = new QueryString("?parameter=");
@ -44,10 +44,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // This will cause selection of the "parameter" prefix.
request.QueryString = new QueryString("?parameter="); request.QueryString = new QueryString("?parameter=");
@ -94,10 +94,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -128,16 +128,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person3), ParameterType = typeof(Person3),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
// This can't be used because of [FromForm] on the property. // This can't be used because of [FromForm] on the property.
request.QueryString = new QueryString("?Name="); request.QueryString = new QueryString("?Name=");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // This will only match empty prefix, but can't be used because of [FromForm] on the property.
request.QueryString = new QueryString("?Name="); request.QueryString = new QueryString("?Name=");
@ -184,10 +184,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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<string, StringValues>() request.Form = new FormCollection(new Dictionary<string, StringValues>()
@ -231,10 +231,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -57,16 +57,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements. // 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.QueryString = new QueryString("?parameter.Customer.Name=bill");
SetJsonBodyContent(request, AddressBodyContent); SetJsonBodyContent(request, AddressBodyContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Customer.Name=bill");
SetJsonBodyContent(request, AddressBodyContent); SetJsonBodyContent(request, AddressBodyContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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.QueryString = new QueryString("?parameter.Customer.Name=bill");
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.ProductId=10");
SetJsonBodyContent(request, AddressBodyContent); SetJsonBodyContent(request, AddressBodyContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
SetJsonBodyContent(request, AddressBodyContent); SetJsonBodyContent(request, AddressBodyContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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 = request.QueryString =
new QueryString("?parameter.Customer.Name=bill&parameter.Customer.Token=" + ByteArrayEncoded); new QueryString("?parameter.Customer.Name=bill&parameter.Customer.Token=" + ByteArrayEncoded);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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); request.QueryString = new QueryString("?Customer.Name=bill&Customer.Token=" + ByteArrayEncoded);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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.QueryString = new QueryString("?parameter.Customer.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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.QueryString = new QueryString("?parameter.Customer.Name=bill");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Customer.Name=bill");
SetFormFileBodyContent(request, "Hello, World!", "Customer.Documents"); SetFormFileBodyContent(request, "Hello, World!", "Customer.Documents");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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.QueryString = new QueryString("?parameter.Customer.Name=bill");
// Deliberately leaving out any form data. // Deliberately leaving out any form data.
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.ProductId=10");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents"); SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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 = request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11"); new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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 = request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11"); new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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 = request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0].Key=key0&parameter.ProductIds[0].Value=10"); new QueryString("?parameter.Name=bill&parameter.ProductIds[0].Key=key0&parameter.ProductIds[0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Name=bill&ProductIds[0].Key=key0&ProductIds[0].Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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 = request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductId.Key=key0&parameter.ProductId.Value=10"); new QueryString("?parameter.Name=bill&parameter.ProductId.Key=key0&parameter.ProductId.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?Name=bill&ProductId.Key=key0&ProductId.Value=10");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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("?"); request.QueryString = new QueryString("?");
SetJsonBodyContent(request, AddressBodyContent); SetJsonBodyContent(request, AddressBodyContent);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1366,12 +1366,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1412,12 +1412,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1461,15 +1461,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Id=123"); request.QueryString = new QueryString("?parameter.Customer.Id=123");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1506,15 +1506,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Customer.Id=123"); request.QueryString = new QueryString("?Customer.Id=123");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1555,15 +1555,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?customParameter.Customer.Id=123"); request.QueryString = new QueryString("?customParameter.Customer.Id=123");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1606,15 +1606,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1649,15 +1649,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1688,15 +1688,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?ProductName=abc"); request.QueryString = new QueryString("?ProductName=abc");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1731,15 +1731,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1774,15 +1774,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1813,15 +1813,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data // No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?OrderIds[0]=123"); request.QueryString = new QueryString("?OrderIds[0]=123");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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="); request.QueryString = new QueryString("?parameter.ProductId=");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); 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. // 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"); request.QueryString = new QueryString("?parameter.ProductId");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -31,11 +31,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(JsonOutputFormatter) ParameterType = typeof(JsonOutputFormatter)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -68,11 +68,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(JsonOutputFormatter), ParameterType = typeof(JsonOutputFormatter),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -104,11 +104,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(IEnumerable<JsonOutputFormatter>), ParameterType = typeof(IEnumerable<JsonOutputFormatter>),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -140,11 +140,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(IEnumerable<IActionResult>), ParameterType = typeof(IEnumerable<IActionResult>),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -176,11 +176,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(IActionResult), ParameterType = typeof(IActionResult),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
// Act & Assert // Act & Assert
var exception = await Assert.ThrowsAsync<InvalidOperationException>( var exception = await Assert.ThrowsAsync<InvalidOperationException>(
() => argumentBinder.BindModelAsync(parameter, operationContext)); () => argumentBinder.BindModelAsync(parameter, testContext));
Assert.Contains(typeof(IActionResult).FullName, exception.Message); Assert.Contains(typeof(IActionResult).FullName, exception.Message);
} }
} }

View File

@ -32,15 +32,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("CustomParameter.Address.Zip", "1"); request.QueryString = QueryString.Create("CustomParameter.Address.Zip", "1");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -76,15 +76,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person) ParameterType = typeof(Person)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address.Zip", "1"); request.QueryString = QueryString.Create("Address.Zip", "1");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -121,15 +121,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(string) ParameterType = typeof(string)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", "someValue"); request.QueryString = QueryString.Create("Parameter1", "someValue");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -165,15 +165,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(string) ParameterType = typeof(string)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Parameter1=someValue&Parameter1=otherValue"); request.QueryString = new QueryString("?Parameter1=someValue&Parameter1=otherValue");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -209,15 +209,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(int) ParameterType = typeof(int)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", "abcd"); request.QueryString = QueryString.Create("Parameter1", "abcd");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -267,15 +267,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = parameterType ParameterType = parameterType
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", "abcd"); request.QueryString = QueryString.Create("Parameter1", "abcd");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -317,14 +317,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = parameterType ParameterType = parameterType
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", ""); request.QueryString = QueryString.Create("Parameter1", "");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -369,14 +369,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = parameterType ParameterType = parameterType
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", string.Empty); request.QueryString = QueryString.Create("Parameter1", string.Empty);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
// ModelBindingResult // ModelBindingResult
@ -412,14 +412,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = parameterType ParameterType = parameterType
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Parameter1", string.Empty); request.QueryString = QueryString.Create("Parameter1", string.Empty);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -452,12 +452,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// No Data. // No Data.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
@ -504,14 +504,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Person), ParameterType = typeof(Person),
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.Form = new FormCollection(personStore); request.Form = new FormCollection(personStore);
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ??
default(ModelBindingResult); default(ModelBindingResult);
// Assert // Assert

View File

@ -27,12 +27,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ExistingModel_EmptyPrefix_OverwritesBoundValues() public async Task TryUpdateModel_ExistingModel_EmptyPrefix_OverwritesBoundValues()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Street", "SomeStreet"); request.QueryString = QueryString.Create("Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Address var model = new Address
{ {
Street = "DefaultStreet", Street = "DefaultStreet",
@ -41,7 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var oldModel = model; var oldModel = model;
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -67,16 +67,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsBound() public async Task TryUpdateModel_ExistingModel_EmptyPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Street", "SomeStreet"); request.QueryString = QueryString.Create("Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Address(); var model = new Address();
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -108,7 +108,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_TopLevelCollection_EmptyPrefix_BindsAfterClearing() public async Task TryUpdateModel_TopLevelCollection_EmptyPrefix_BindsAfterClearing()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create(new Dictionary<string, string> request.QueryString = QueryString.Create(new Dictionary<string, string>
{ {
@ -117,7 +117,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new List<Person1> var model = new List<Person1>
{ {
new Person1 new Person1
@ -134,7 +134,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -166,12 +166,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NestedPoco_EmptyPrefix_DoesNotTrounceUnboundValues() public async Task TryUpdateModel_NestedPoco_EmptyPrefix_DoesNotTrounceUnboundValues()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address.Street", "SomeStreet"); request.QueryString = QueryString.Create("Address.Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person1 var model = new Person1
{ {
Name = "Joe", Name = "Joe",
@ -184,7 +184,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var oldModel = model; var oldModel = model;
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -216,16 +216,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_CreatesCollection() public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_CreatesCollection()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person2(); var model = new Person2();
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -252,12 +252,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_MaintainsCollectionIfNonNull() public async Task TryUpdateModel_SettableCollectionModel_EmptyPrefix_MaintainsCollectionIfNonNull()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person2 var model = new Person2
{ {
Address = new List<Address>(), Address = new List<Address>(),
@ -265,7 +265,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var collection = model.Address; var collection = model.Address;
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -303,12 +303,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NonSettableCollectionModel_EmptyPrefix_GetsBound() public async Task TryUpdateModel_NonSettableCollectionModel_EmptyPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person3 var model = new Person3
{ {
Address = Address =
@ -327,7 +327,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -358,16 +358,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ReadOnlyCollectionModel_EmptyPrefix_DoesNotGetBound() public async Task TryUpdateModel_ReadOnlyCollectionModel_EmptyPrefix_DoesNotGetBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person6(); var model = new Person6();
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -397,16 +397,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_CreatesArray() public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_CreatesArray()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person4(); var model = new Person4();
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -433,12 +433,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_OverwritesArray() public async Task TryUpdateModel_SettableArrayModel_EmptyPrefix_OverwritesArray()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person4 var model = new Person4
{ {
Address = new Address[] Address = new Address[]
@ -453,7 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var collection = model.Address; var collection = model.Address;
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -486,16 +486,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NonSettableArrayModel_EmptyPrefix_GetsBound() public async Task TryUpdateModel_NonSettableArrayModel_EmptyPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person5(); var model = new Person5();
// Act // Act
var result = await TryUpdateModel(model, string.Empty, operationContext); var result = await TryUpdateModel(model, string.Empty, testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -516,12 +516,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ExistingModel_WithPrefix_ValuesGetOverwritten() public async Task TryUpdateModel_ExistingModel_WithPrefix_ValuesGetOverwritten()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Address var model = new Address
{ {
Street = "DefaultStreet", Street = "DefaultStreet",
@ -530,7 +530,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var oldModel = model; var oldModel = model;
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -556,16 +556,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsBound() public async Task TryUpdateModel_ExistingModel_WithPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Address(); var model = new Address();
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -590,7 +590,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_TopLevelCollection_WithPrefix_BindsAfterClearing() public async Task TryUpdateModel_TopLevelCollection_WithPrefix_BindsAfterClearing()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create(new Dictionary<string, string> request.QueryString = QueryString.Create(new Dictionary<string, string>
{ {
@ -599,7 +599,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new List<Person1> var model = new List<Person1>
{ {
new Person1 new Person1
@ -616,7 +616,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -648,12 +648,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NestedPoco_WithPrefix_DoesNotTrounceUnboundValues() public async Task TryUpdateModel_NestedPoco_WithPrefix_DoesNotTrounceUnboundValues()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address.Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address.Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person1 var model = new Person1
{ {
Name = "Joe", Name = "Joe",
@ -666,7 +666,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var oldModel = model; var oldModel = model;
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -693,16 +693,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_CreatesCollection() public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_CreatesCollection()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person2(); var model = new Person2();
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -729,12 +729,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_MaintainsCollectionIfNonNull() public async Task TryUpdateModel_SettableCollectionModel_WithPrefix_MaintainsCollectionIfNonNull()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person2 var model = new Person2
{ {
Address = new List<Address>(), Address = new List<Address>(),
@ -742,7 +742,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var collection = model.Address; var collection = model.Address;
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -770,12 +770,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NonSettableCollectionModel_WithPrefix_GetsBound() public async Task TryUpdateModel_NonSettableCollectionModel_WithPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person3 var model = new Person3
{ {
Address = Address =
@ -794,7 +794,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -820,16 +820,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBound() public async Task TryUpdateModel_ReadOnlyCollectionModel_WithPrefix_DoesNotGetBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person6(); var model = new Person6();
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -854,16 +854,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableArrayModel_WithPrefix_CreatesArray() public async Task TryUpdateModel_SettableArrayModel_WithPrefix_CreatesArray()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person4(); var model = new Person4();
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -890,12 +890,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_SettableArrayModel_WithPrefix_OverwritesArray() public async Task TryUpdateModel_SettableArrayModel_WithPrefix_OverwritesArray()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person4 var model = new Person4
{ {
Address = new Address[] Address = new Address[]
@ -910,7 +910,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var collection = model.Address; var collection = model.Address;
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -938,16 +938,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public async Task TryUpdateModel_NonSettableArrayModel_WithPrefix_GetsBound() public async Task TryUpdateModel_NonSettableArrayModel_WithPrefix_GetsBound()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet"); request.QueryString = QueryString.Create("prefix.Address[0].Street", "SomeStreet");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new Person5(); var model = new Person5();
// Act // Act
var result = await TryUpdateModel(model, "prefix", operationContext); var result = await TryUpdateModel(model, "prefix", testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -968,9 +968,9 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
{ {
// Arrange // Arrange
var data = "some data"; var data = "some data";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => UpdateRequest(request, data, "files")); request => UpdateRequest(request, data, "files"));
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new List<IFormFile> var model = new List<IFormFile>
{ {
new FormFile(new MemoryStream(), baseStreamOffset: 0, length: 0, name: "file", fileName: "file1"), new FormFile(new MemoryStream(), baseStreamOffset: 0, length: 0, name: "file", fileName: "file1"),
@ -979,7 +979,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
// Act // Act
var result = await TryUpdateModel(model, prefix: "files", operationContext: operationContext); var result = await TryUpdateModel(model, prefix: "files", testContext: testContext);
// Assert // Assert
Assert.True(result); Assert.True(result);
@ -1088,19 +1088,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
private Task<bool> TryUpdateModel( private Task<bool> TryUpdateModel(
object model, object model,
string prefix, string prefix,
OperationBindingContext operationContext) ModelBindingTestContext testContext)
{ {
return ModelBindingHelper.TryUpdateModelAsync( return ModelBindingHelper.TryUpdateModelAsync(
model, model,
model.GetType(), model.GetType(),
prefix, prefix,
operationContext.ActionContext, testContext,
operationContext.MetadataProvider, testContext.MetadataProvider,
TestModelBinderFactory.CreateDefault(), TestModelBinderFactory.CreateDefault(),
operationContext.ValueProvider, new CompositeValueProvider(testContext.ValueProviders),
operationContext.InputFormatters, ModelBindingTestHelper.GetObjectValidator(testContext.MetadataProvider));
ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider),
operationContext.ValidatorProvider);
} }
} }
} }

View File

@ -6,6 +6,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Testing; using Microsoft.AspNetCore.Testing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Xunit; using Xunit;
namespace Microsoft.AspNetCore.Mvc.IntegrationTests namespace Microsoft.AspNetCore.Mvc.IntegrationTests
@ -16,9 +18,9 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public void ModelState_IsInvalid_ForInvalidData_OnDerivedModel() public void ModelState_IsInvalid_ForInvalidData_OnDerivedModel()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new SoftwareViewModel var model = new SoftwareViewModel
{ {
Category = "Technology", Category = "Technology",
@ -29,14 +31,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Price = 110, Price = 110,
Version = "2" Version = "2"
}; };
var oldModel = model;
var controller = CreateController(testContext, testContext.MetadataProvider);
// Act // Act
var result = TryValidateModel(model, "software", operationContext); var result = controller.TryValidateModel(model, prefix: "software");
// Assert // Assert
Assert.False(result); Assert.False(result);
Assert.Same(oldModel, model);
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
var modelStateErrors = GetModelStateErrors(modelState); var modelStateErrors = GetModelStateErrors(modelState);
Assert.Single(modelStateErrors); Assert.Single(modelStateErrors);
@ -47,8 +49,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public void ModelState_IsValid_ForValidData_OnDerivedModel() public void ModelState_IsValid_ForValidData_OnDerivedModel()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new SoftwareViewModel var model = new SoftwareViewModel
{ {
Category = "Technology", Category = "Technology",
@ -60,14 +62,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Price = 110, Price = 110,
Version = "2" Version = "2"
}; };
var oldModel = model;
var controller = CreateController(testContext, testContext.MetadataProvider);
// Act // Act
var result = TryValidateModel(model, prefix: string.Empty, operationContext: operationContext); var result = controller.TryValidateModel(model);
// Assert // Assert
Assert.True(result); Assert.True(result);
Assert.Same(oldModel, model);
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
var modelStateErrors = GetModelStateErrors(modelState); var modelStateErrors = GetModelStateErrors(modelState);
Assert.Empty(modelStateErrors); Assert.Empty(modelStateErrors);
@ -77,8 +79,8 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
public void TryValidateModel_CollectionsModel_ReturnsErrorsForInvalidProperties() public void TryValidateModel_CollectionsModel_ReturnsErrorsForInvalidProperties()
{ {
// Arrange // Arrange
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
var model = new List<ProductViewModel>(); var model = new List<ProductViewModel>();
model.Add(new ProductViewModel() model.Add(new ProductViewModel()
{ {
@ -102,10 +104,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
Detail3 = "d3" Detail3 = "d3"
} }
}); });
var oldModel = model;
var controller = CreateController(testContext, testContext.MetadataProvider);
// Act // Act
var result = TryValidateModel(model, prefix: string.Empty, operationContext: operationContext); var result = controller.TryValidateModel(model);
// Assert // Assert
Assert.False(result); Assert.False(result);
@ -133,18 +136,18 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
modelStateErrors["[1].Contact"]); modelStateErrors["[1].Contact"]);
} }
private bool TryValidateModel( private TestController CreateController(
object model, ActionContext actionContext,
string prefix, IModelMetadataProvider metadataProvider)
OperationBindingContext operationContext)
{ {
var controller = new TestController(); var options = actionContext.HttpContext.RequestServices.GetRequiredService<IOptions<MvcOptions>>();
controller.ControllerContext = new ControllerContext(operationContext.ActionContext);
controller.ObjectValidator = ModelBindingTestHelper.GetObjectValidator(operationContext.MetadataProvider);
controller.MetadataProvider = operationContext.MetadataProvider;
controller.ControllerContext.ValidatorProviders = new[] { operationContext.ValidatorProvider }.ToList();
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) private void AssertErrorEquals(string expected, string actual)

View File

@ -90,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = new QueryString("?accountId=30"); request.QueryString = new QueryString("?accountId=30");
@ -99,11 +99,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}, },
actionDescriptor: actionDescriptor); actionDescriptor: actionDescriptor);
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var arguments = await argumentBinder.BindActionArgumentsAsync( var arguments = await argumentBinder.BindActionArgumentsAsync(testContext, new TestController());
(ControllerContext)operationContext.ActionContext, new TestController());
// Assert // Assert
Assert.False(modelState.IsValid); Assert.False(modelState.IsValid);
@ -130,7 +129,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}; };
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder();
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = new QueryString("?accountId=10"); request.QueryString = new QueryString("?accountId=10");
@ -139,11 +138,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}, },
actionDescriptor: actionDescriptor); actionDescriptor: actionDescriptor);
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var arguments = await argumentBinder.BindActionArgumentsAsync( var arguments = await argumentBinder.BindActionArgumentsAsync(testContext, new TestController());
(ControllerContext)operationContext.ActionContext, new TestController());
// Assert // Assert
Assert.True(modelState.IsValid); Assert.True(modelState.IsValid);
@ -175,15 +173,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order1) ParameterType = typeof(Order1)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.CustomerName=bill"); request.QueryString = new QueryString("?parameter.CustomerName=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -212,15 +210,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order1) ParameterType = typeof(Order1)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -263,15 +261,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order2) ParameterType = typeof(Order2)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=bill"); request.QueryString = new QueryString("?parameter.Customer.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -301,15 +299,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order2) ParameterType = typeof(Order2)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -354,15 +352,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order3) ParameterType = typeof(Order3)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=bill"); request.QueryString = new QueryString("?parameter.Customer.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -392,16 +390,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order3) ParameterType = typeof(Order3)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
// Force creation of the Customer model. // Force creation of the Customer model.
request.QueryString = new QueryString("?parameter.Customer.Age=17"); request.QueryString = new QueryString("?parameter.Customer.Age=17");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -446,15 +444,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order4) ParameterType = typeof(Order4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Items[0].ItemId=17"); request.QueryString = new QueryString("?Items[0].ItemId=17");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -484,16 +482,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order4) ParameterType = typeof(Order4)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
// Force creation of the Customer model. // Force creation of the Customer model.
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -533,15 +531,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Order5>) ParameterType = typeof(List<Order5>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].ProductId=17"); request.QueryString = new QueryString("?parameter[0].ProductId=17");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -570,16 +568,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Order5>) ParameterType = typeof(List<Order5>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
// Force creation of the Customer model. // Force creation of the Customer model.
request.QueryString = new QueryString("?parameter[0].Name=bill"); request.QueryString = new QueryString("?parameter[0].Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -619,15 +617,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order6) ParameterType = typeof(Order6)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Name=bill"); request.QueryString = new QueryString("?parameter.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -656,15 +654,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order6) ParameterType = typeof(Order6)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Name=billybob"); request.QueryString = new QueryString("?parameter.Name=billybob");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -707,15 +705,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order7) ParameterType = typeof(Order7)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=bill"); request.QueryString = new QueryString("?parameter.Customer.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -744,15 +742,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order7) ParameterType = typeof(Order7)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=billybob"); request.QueryString = new QueryString("?parameter.Customer.Name=billybob");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -784,15 +782,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order7) ParameterType = typeof(Order7)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -842,15 +840,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order8) ParameterType = typeof(Order8)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=bill"); request.QueryString = new QueryString("?parameter.Customer.Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -879,15 +877,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order8) ParameterType = typeof(Order8)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Customer.Name=billybob"); request.QueryString = new QueryString("?parameter.Customer.Name=billybob");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -949,15 +947,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order9) ParameterType = typeof(Order9)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Products[0].Name=bill"); request.QueryString = new QueryString("?parameter.Products[0].Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -986,15 +984,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Order9) ParameterType = typeof(Order9)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter.Products[0].Name=billybob"); request.QueryString = new QueryString("?parameter.Products[0].Name=billybob");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1037,15 +1035,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Order10>) ParameterType = typeof(List<Order10>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Name=bill"); request.QueryString = new QueryString("?parameter[0].Name=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1074,15 +1072,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Order10>) ParameterType = typeof(List<Order10>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?parameter[0].Name=billybob"); request.QueryString = new QueryString("?parameter[0].Name=billybob");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1114,15 +1112,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(List<Order10>) ParameterType = typeof(List<Order10>)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?"); request.QueryString = new QueryString("?");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1154,15 +1152,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(User) ParameterType = typeof(User)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Id=bill"); request.QueryString = new QueryString("?Id=bill");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1194,15 +1192,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(User) ParameterType = typeof(User)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request => var testContext = ModelBindingTestHelper.GetTestContext(request =>
{ {
request.QueryString = new QueryString("?Zip=-123"); request.QueryString = new QueryString("?Zip=-123");
}); });
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1262,7 +1260,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
MvcOptions testOptions = null; MvcOptions testOptions = null;
var input = "{\"Zip\":\"47\"}"; var input = "{\"Zip\":\"47\"}";
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.QueryString = request.QueryString =
@ -1277,10 +1275,10 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
}); });
var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(testOptions); var argumentBinder = ModelBindingTestHelper.GetArgumentBinder(testOptions);
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext);
Assert.Equal(3, modelState.Count); Assert.Equal(3, modelState.Count);
Assert.Equal(0, modelState.ErrorCount); Assert.Equal(0, modelState.ErrorCount);
@ -1318,22 +1316,22 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(JToken) ParameterType = typeof(JToken)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }")); request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }"));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// We need to add another model state entry which should get marked as skipped so // We need to add another model state entry which should get marked as skipped so
// we can prove that the JObject was skipped. // we can prove that the JObject was skipped.
modelState.SetModelValue("CustomParameter.message", "Hello", "Hello"); modelState.SetModelValue("CustomParameter.message", "Hello", "Hello");
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1367,16 +1365,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(CancellationToken) ParameterType = typeof(CancellationToken)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(); var testContext = ModelBindingTestHelper.GetTestContext();
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// We need to add another model state entry - we want this to be ignored. // We need to add another model state entry - we want this to be ignored.
modelState.SetModelValue("message", "Hello", "Hello"); modelState.SetModelValue("message", "Hello", "Hello");
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1407,21 +1405,21 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Greeting) ParameterType = typeof(Greeting)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }")); request.Body = new MemoryStream(Encoding.UTF8.GetBytes("{ message: \"Hello\" }"));
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// We need to add another model state entry which should not get changed. // We need to add another model state entry which should not get changed.
modelState.SetModelValue("other.key", "1", "1"); modelState.SetModelValue("other.key", "1", "1");
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);
@ -1453,7 +1451,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
ParameterType = typeof(Greeting) ParameterType = typeof(Greeting)
}; };
var operationContext = ModelBindingTestHelper.GetOperationBindingContext( var testContext = ModelBindingTestHelper.GetTestContext(
request => request =>
{ {
// This string is too long and will have a validation error. // This string is too long and will have a validation error.
@ -1461,14 +1459,14 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
request.ContentType = "application/json"; request.ContentType = "application/json";
}); });
var httpContext = operationContext.HttpContext; var httpContext = testContext.HttpContext;
var modelState = operationContext.ActionContext.ModelState; var modelState = testContext.ModelState;
// We need to add another model state entry which should not get changed. // We need to add another model state entry which should not get changed.
modelState.SetModelValue("other.key", "1", "1"); modelState.SetModelValue("other.key", "1", "1");
// Act // Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult); var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert // Assert
Assert.True(modelBindingResult.IsModelSet); Assert.True(modelBindingResult.IsModelSet);

View File

@ -11,7 +11,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation
internal class TestModelValidatorProvider : CompositeModelValidatorProvider internal class TestModelValidatorProvider : CompositeModelValidatorProvider
{ {
// Creates a provider with all the defaults - includes data annotations // Creates a provider with all the defaults - includes data annotations
public static IModelValidatorProvider CreateDefaultProvider() public static CompositeModelValidatorProvider CreateDefaultProvider()
{ {
var providers = new IModelValidatorProvider[] var providers = new IModelValidatorProvider[]
{ {

View File

@ -279,24 +279,25 @@ namespace Microsoft.AspNetCore.Mvc.Test
var viewData = new ViewDataDictionary(metadataProvider, new ModelStateDictionary()); var viewData = new ViewDataDictionary(metadataProvider, new ModelStateDictionary());
var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>()); var tempData = new TempDataDictionary(httpContext, Mock.Of<ITempDataProvider>());
var valiatorProviders = new[]
{
new DataAnnotationsModelValidatorProvider(
new ValidationAttributeAdapterProvider(),
new TestOptionsManager<MvcDataAnnotationsLocalizationOptions>(),
stringLocalizerFactory: null),
};
var controllerContext = new ControllerContext() var controllerContext = new ControllerContext()
{ {
HttpContext = httpContext, HttpContext = httpContext,
ValueProviders = new[] { valueProvider, }, ValueProviders = new[] { valueProvider, },
ValidatorProviders = new[]
{
new DataAnnotationsModelValidatorProvider(
new ValidationAttributeAdapterProvider(),
new TestOptionsManager<MvcDataAnnotationsLocalizationOptions>(),
stringLocalizerFactory: null),
},
}; };
var controller = new TestableController() var controller = new TestableController()
{ {
ControllerContext = controllerContext, ControllerContext = controllerContext,
MetadataProvider = metadataProvider, MetadataProvider = metadataProvider,
ObjectValidator = new DefaultObjectValidator(metadataProvider, new ValidatorCache()), ObjectValidator = new DefaultObjectValidator(metadataProvider, valiatorProviders),
TempData = tempData, TempData = tempData,
ViewData = viewData, ViewData = viewData,
}; };

View File

@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim
// Arrange // Arrange
var binder = new HttpRequestMessageModelBinder(); var binder = new HttpRequestMessageModelBinder();
var bindingContext = GetBindingContext(typeof(HttpRequestMessage)); var bindingContext = GetBindingContext(typeof(HttpRequestMessage));
var expectedModel = bindingContext.OperationBindingContext.HttpContext.GetHttpRequestMessage(); var expectedModel = bindingContext.HttpContext.GetHttpRequestMessage();
// Act // Act
await binder.BindModelAsync(bindingContext); await binder.BindModelAsync(bindingContext);
@ -42,20 +42,16 @@ namespace Microsoft.AspNetCore.Mvc.WebApiCompatShim
var metadataProvider = new EmptyModelMetadataProvider(); var metadataProvider = new EmptyModelMetadataProvider();
DefaultModelBindingContext bindingContext = new DefaultModelBindingContext DefaultModelBindingContext bindingContext = new DefaultModelBindingContext
{ {
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
ModelMetadata = metadataProvider.GetMetadataForType(modelType), ModelMetadata = metadataProvider.GetMetadataForType(modelType),
ModelName = "someName", ModelName = "someName",
OperationBindingContext = new OperationBindingContext
{
ActionContext = new ActionContext()
{
HttpContext = new DefaultHttpContext(),
},
MetadataProvider = metadataProvider,
},
ValidationState = new ValidationStateDictionary(), ValidationState = new ValidationStateDictionary(),
}; };
bindingContext.OperationBindingContext.HttpContext.Request.Method = "GET"; bindingContext.HttpContext.Request.Method = "GET";
return bindingContext; return bindingContext;
} }