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.
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc.ModelBinding
@ -11,6 +12,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary>
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>
/// Gets or sets a model name which is explicitly set using an <see cref="IModelNameProvider"/>.
/// </summary>
@ -27,6 +36,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary>
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>
/// Gets or sets an indication that the current binder is handling the top-level object.
/// </summary>
@ -57,6 +71,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// 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.
/// </summary>
/// <remarks>
/// The property setter is provided for unit testing purposes only.
/// </remarks>
public abstract ModelStateDictionary ModelState { get; set; }
/// <summary>
@ -65,12 +82,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <remarks>
/// The <see cref="ModelMetadata"/> property must be set to access this property.
/// </remarks>
public abstract Type ModelType { get; }
/// <summary>
/// Represents the <see cref="ModelBinding.OperationBindingContext"/> associated with this context.
/// </summary>
public abstract OperationBindingContext OperationBindingContext { get; set; }
public virtual Type ModelType => ModelMetadata.ModelType;
/// <summary>
/// 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
/// customize validation behavior for a model object.
/// </summary>
/// <remarks>
/// The property setter is provided for unit testing purposes only.
/// </remarks>
public abstract ValidationStateDictionary ValidationState { get; set; }
/// <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,
ModelBinderFactory,
valueProvider,
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders));
ObjectValidator);
}
/// <summary>
@ -1161,9 +1159,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
includeExpressions);
}
@ -1201,9 +1197,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter);
}
@ -1249,9 +1243,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
valueProvider,
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
includeExpressions);
}
@ -1296,9 +1288,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
valueProvider,
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter);
}
@ -1335,9 +1325,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
new CompositeValueProvider(ControllerContext.ValueProviders),
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders));
ObjectValidator);
}
/// <summary>
@ -1387,9 +1375,7 @@ namespace Microsoft.AspNetCore.Mvc
MetadataProvider,
ModelBinderFactory,
valueProvider,
ControllerContext.InputFormatters,
ObjectValidator,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
propertyFilter);
}
@ -1429,7 +1415,6 @@ namespace Microsoft.AspNetCore.Mvc
ObjectValidator.Validate(
ControllerContext,
new CompositeModelValidatorProvider(ControllerContext.ValidatorProviders),
validationState: null,
prefix: prefix ?? string.Empty,
model: model);

View File

@ -5,9 +5,7 @@ using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Core;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc
{
@ -16,8 +14,6 @@ namespace Microsoft.AspNetCore.Mvc
/// </summary>
public class ControllerContext : ActionContext
{
private FormatterCollection<IInputFormatter> _inputFormatters;
private IList<IModelValidatorProvider> _validatorProviders;
private IList<IValueProvider> _valueProviders;
/// <summary>
@ -55,56 +51,6 @@ namespace Microsoft.AspNetCore.Mvc
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>
/// Gets or sets the list of <see cref="IValueProvider"/> instances for the current request.
/// </summary>

View File

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

View File

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

View File

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

View File

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

View File

@ -12,7 +12,10 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// </summary>
public class DefaultModelBindingContext : ModelBindingContext
{
private OperationBindingContext _operationBindingContext;
private IValueProvider _originalValueProvider;
private ActionContext _actionContext;
private ModelStateDictionary _modelState;
private ValidationStateDictionary _validationState;
private State _state;
private readonly Stack<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 />
public override NestedScope EnterNestedScope(
ModelMetadata modelMetadata,
string fieldName,
string modelName,
object model)
public override ActionContext ActionContext
{
if (modelMetadata == null)
{
throw new ArgumentNullException(nameof(modelMetadata));
}
if (fieldName == null)
{
throw new ArgumentNullException(nameof(fieldName));
}
if (modelName == null)
{
throw new ArgumentNullException(nameof(modelName));
}
var scope = EnterNestedScope();
// Only filter if the new BindingSource affects the value providers. Otherwise we want
// to preserve the currrent state.
if (modelMetadata.BindingSource != null && !modelMetadata.BindingSource.IsGreedy)
{
ValueProvider = FilterValueProvider(_operationBindingContext.ValueProvider, modelMetadata.BindingSource);
}
Model = model;
ModelMetadata = modelMetadata;
ModelName = modelName;
FieldName = fieldName;
BinderModelName = modelMetadata.BinderModelName;
BindingSource = modelMetadata.BindingSource;
PropertyFilter = modelMetadata.PropertyFilterProvider?.PropertyFilter;
IsTopLevelObject = false;
return scope;
}
/// <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; }
get { return _actionContext; }
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_operationBindingContext = value;
_actionContext = value;
}
}
@ -211,20 +93,17 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <inheritdoc />
public override ModelStateDictionary ModelState
{
get { return _state.ModelState; }
get { return _modelState; }
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_state.ModelState = value;
_modelState = value;
}
}
/// <inheritdoc />
public override Type ModelType => ModelMetadata?.ModelType;
/// <inheritdoc />
public override string BinderModelName
{
@ -246,6 +125,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
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 />
public override IValueProvider ValueProvider
{
@ -270,8 +165,15 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <inheritdoc />
public override ValidationStateDictionary ValidationState
{
get { return _state.ValidationState; }
set { _state.ValidationState = value; }
get { return _validationState; }
set
{
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
_validationState = value;
}
}
/// <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)
{
if (bindingSource == null || bindingSource.IsGreedy)
@ -317,8 +344,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
public IValueProvider ValueProvider;
public Func<ModelMetadata, bool> PropertyFilter;
public ValidationStateDictionary ValidationState;
public ModelStateDictionary ModelState;
public string BinderModelName;
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.
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
@ -14,34 +15,36 @@ namespace Microsoft.AspNetCore.Mvc.Internal
{
private readonly IModelMetadataProvider _modelMetadataProvider;
private readonly ValidatorCache _validatorCache;
private readonly IModelValidatorProvider _validatorProvider;
/// <summary>
/// Initializes a new instance of <see cref="DefaultObjectValidator"/>.
/// </summary>
/// <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(
IModelMetadataProvider modelMetadataProvider,
ValidatorCache validatorCache)
IList<IModelValidatorProvider> validatorProviders)
{
if (modelMetadataProvider == null)
{
throw new ArgumentNullException(nameof(modelMetadataProvider));
}
if (validatorCache == null)
if (validatorProviders == null)
{
throw new ArgumentNullException(nameof(validatorCache));
throw new ArgumentNullException(nameof(validatorProviders));
}
_modelMetadataProvider = modelMetadataProvider;
_validatorCache = validatorCache;
_validatorCache = new ValidatorCache();
_validatorProvider = new CompositeModelValidatorProvider(validatorProviders);
}
/// <inheritdoc />
public void Validate(
ActionContext actionContext,
IModelValidatorProvider validatorProvider,
ValidationStateDictionary validationState,
string prefix,
object model)
@ -51,14 +54,9 @@ namespace Microsoft.AspNetCore.Mvc.Internal
throw new ArgumentNullException(nameof(actionContext));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
var visitor = new ValidationVisitor(
actionContext,
validatorProvider,
_validatorProvider,
_validatorCache,
_modelMetadataProvider,
validationState);

View File

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

View File

@ -46,7 +46,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
// Set up ModelBinding
options.ModelBinderProviders.Add(new BinderTypeModelBinderProvider());
options.ModelBinderProviders.Add(new ServicesModelBinderProvider());
options.ModelBinderProviders.Add(new BodyModelBinderProvider(_readerFactory));
options.ModelBinderProviders.Add(new BodyModelBinderProvider(options.InputFormatters, _readerFactory));
options.ModelBinderProviders.Add(new HeaderModelBinderProvider());
options.ModelBinderProviders.Add(new SimpleTypeModelBinderProvider());
options.ModelBinderProviders.Add(new CancellationTokenModelBinderProvider());

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -252,8 +252,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
modelName: modelName,
model: null))
{
// If any property can return a true value.
if (CanBindValue(bindingContext))
// If any property can be bound from a value provider then continue.
if (bindingContext.ValueProvider.ContainsPrefix(bindingContext.ModelName))
{
return true;
}
@ -271,33 +271,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
return false;
}
private bool CanBindValue(ModelBindingContext bindingContext)
{
var valueProvider = bindingContext.ValueProvider;
var bindingSource = bindingContext.BindingSource;
if (bindingSource != null && !bindingSource.IsGreedy)
{
var rootValueProvider = bindingContext.OperationBindingContext.ValueProvider as IBindingSourceValueProvider;
if (rootValueProvider != null)
{
valueProvider = rootValueProvider.Filter(bindingSource);
if (valueProvider == null)
{
// Unable to find a value provider for this binding source. Binding will fail.
return false;
}
}
}
if (valueProvider.ContainsPrefix(bindingContext.ModelName))
{
return true;
}
return false;
}
// Internal for tests
internal static bool CanUpdatePropertyInternal(ModelMetadata propertyMetadata)
{

View File

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

View File

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

View File

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

View File

@ -25,7 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
throw new ArgumentNullException(nameof(bindingContext));
}
var request = bindingContext.OperationBindingContext.HttpContext.Request;
var request = bindingContext.HttpContext.Request;
// Property name can be null if the model metadata represents a type (rather than a property or parameter).
var headerName = bindingContext.FieldName;

View File

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

View File

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

View File

@ -12,7 +12,6 @@ using System.Reflection;
using System.Runtime.ExceptionServices;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Core;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
namespace Microsoft.AspNetCore.Mvc.ModelBinding
@ -22,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
/// <summary>
/// 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 <paramref name="validatorProvider"/>.
/// validation using the specified <paramref name="objectModelValidator"/>.
/// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam>
/// <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="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</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
/// 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>
public static Task<bool> TryUpdateModelAsync<TModel>(
TModel model,
@ -47,9 +41,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider)
IObjectModelValidator objectModelValidator)
where TModel : class
{
if (model == null)
@ -82,21 +74,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider));
}
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null)
{
throw new ArgumentNullException(nameof(objectModelValidator));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
// Includes everything by default.
return TryUpdateModelAsync(
model,
@ -105,16 +87,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider,
modelBinderFactory,
valueProvider,
inputFormatters,
objectModelValidator,
validatorProvider,
propertyFilter: (m) => true);
}
/// <summary>
/// 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
/// <paramref name="validatorProvider"/>.
/// <paramref name="objectModelValidator"/>.
/// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam>
/// <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="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</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
/// 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
/// 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>
@ -142,9 +116,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
params Expression<Func<TModel, object>>[] includeExpressions)
where TModel : class
{
@ -178,21 +150,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider));
}
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null)
{
throw new ArgumentNullException(nameof(objectModelValidator));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (includeExpressions == null)
{
throw new ArgumentNullException(nameof(includeExpressions));
@ -208,16 +170,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider,
modelBinderFactory,
valueProvider,
inputFormatters,
objectModelValidator,
validatorProvider,
propertyFilter: propertyFilter);
propertyFilter);
}
/// <summary>
/// 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
/// <paramref name="validatorProvider"/>.
/// <paramref name="objectModelValidator"/>.
/// </summary>
/// <typeparam name="TModel">The type of the model object.</typeparam>
/// <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="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</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
/// 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 filter properties(for inclusion/exclusion) at runtime.
/// </param>
@ -245,9 +200,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
Func<ModelMetadata, bool> propertyFilter)
where TModel : class
{
@ -281,21 +234,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider));
}
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null)
{
throw new ArgumentNullException(nameof(objectModelValidator));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (propertyFilter == null)
{
throw new ArgumentNullException(nameof(propertyFilter));
@ -309,16 +252,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider,
modelBinderFactory,
valueProvider,
inputFormatters,
objectModelValidator,
validatorProvider,
propertyFilter: propertyFilter);
propertyFilter);
}
/// <summary>
/// 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
/// <paramref name="validatorProvider"/>.
/// <paramref name="objectModelValidator"/>.
/// </summary>
/// <param name="model">The 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="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</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
/// 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>
public static Task<bool> TryUpdateModelAsync(
object model,
Type modelType,
string prefix,
ActionContext actionContext,
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider)
object model,
Type modelType,
string prefix,
ActionContext actionContext,
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IObjectModelValidator objectModelValidator)
{
if (model == null)
{
@ -383,21 +317,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider));
}
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null)
{
throw new ArgumentNullException(nameof(objectModelValidator));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
// Includes everything by default.
return TryUpdateModelAsync(
model,
@ -407,16 +331,14 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
metadataProvider,
modelBinderFactory,
valueProvider,
inputFormatters,
objectModelValidator,
validatorProvider,
propertyFilter: (m) => true);
}
/// <summary>
/// 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
/// <paramref name="validatorProvider"/>.
/// <paramref name="objectModelValidator"/>.
/// </summary>
/// <param name="model">The 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="modelBinderFactory">The <see cref="IModelBinderFactory"/> used for binding.</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
/// 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
/// 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>
@ -444,9 +361,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
IModelMetadataProvider metadataProvider,
IModelBinderFactory modelBinderFactory,
IValueProvider valueProvider,
IList<IInputFormatter> inputFormatters,
IObjectModelValidator objectModelValidator,
IModelValidatorProvider validatorProvider,
Func<ModelMetadata, bool> propertyFilter)
{
if (model == null)
@ -484,21 +399,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(valueProvider));
}
if (inputFormatters == null)
{
throw new ArgumentNullException(nameof(inputFormatters));
}
if (objectModelValidator == null)
{
throw new ArgumentNullException(nameof(objectModelValidator));
}
if (validatorProvider == null)
{
throw new ArgumentNullException(nameof(validatorProvider));
}
if (propertyFilter == null)
{
throw new ArgumentNullException(nameof(propertyFilter));
@ -515,20 +420,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var modelMetadata = metadataProvider.GetMetadataForType(modelType);
var modelState = actionContext.ModelState;
var operationBindingContext = new OperationBindingContext
{
InputFormatters = inputFormatters,
ValidatorProvider = validatorProvider,
MetadataProvider = metadataProvider,
ActionContext = actionContext,
ValueProvider = valueProvider,
};
var modelBindingContext = DefaultModelBindingContext.CreateBindingContext(
operationBindingContext,
actionContext,
valueProvider,
modelMetadata,
bindingInfo: null,
modelName: prefix ?? string.Empty);
modelBindingContext.Model = model;
modelBindingContext.PropertyFilter = propertyFilter;
@ -555,8 +453,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
if (modelBindingResult != null && modelBindingResult.Value.IsModelSet)
{
objectModelValidator.Validate(
operationBindingContext.ActionContext,
operationBindingContext.ValidatorProvider,
actionContext,
modelBindingContext.ValidationState,
modelBindingResult.Value.Key,
modelBindingResult.Value.Model);

View File

@ -12,7 +12,6 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Validation
/// Validates the provided object.
/// </summary>
/// <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="prefix">
/// 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>
void Validate(
ActionContext actionContext,
IModelValidatorProvider validatorProvider,
ValidationStateDictionary validationState,
string prefix,
object model);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.Formatters;
using Xunit;
namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
@ -25,7 +27,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
public void Create_WhenBindingSourceIsNotFromBody_ReturnsNull(BindingSource source)
{
// Arrange
var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory());
var provider = CreateProvider();
var context = new TestModelBinderProviderContext(typeof(Person));
context.BindingInfo.BindingSource = source;
@ -41,7 +43,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
public void Create_WhenBindingSourceIsFromBody_ReturnsBinder()
{
// Arrange
var provider = new BodyModelBinderProvider(new TestHttpRequestStreamReaderFactory());
var provider = CreateProvider();
var context = new TestModelBinderProviderContext(typeof(Person));
context.BindingInfo.BindingSource = BindingSource.Body;
@ -53,6 +55,11 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders
Assert.IsType<BodyModelBinder>(result);
}
private static BodyModelBinderProvider CreateProvider()
{
return new BodyModelBinderProvider(new List<IInputFormatter>(), new TestHttpRequestStreamReaderFactory());
}
private class Person
{
public string Name { get; set; }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

View File

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

View File

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

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.
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers;
@ -18,7 +19,7 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
{
public static class ModelBindingTestHelper
{
public static OperationBindingContext GetOperationBindingContext(
public static ModelBindingTestContext GetTestContext(
Action<HttpRequest> updateRequest = null,
Action<MvcOptions> updateOptions = null,
ControllerActionDescriptor actionDescriptor = null)
@ -26,21 +27,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
var httpContext = GetHttpContext(updateRequest, updateOptions);
var services = httpContext.RequestServices;
actionDescriptor = actionDescriptor ?? new ControllerActionDescriptor();
var actionContext = new ActionContext(httpContext, new RouteData(), actionDescriptor);
var controllerContext = GetControllerContext(
services.GetRequiredService<IOptions<MvcOptions>>().Value,
actionContext);
return new OperationBindingContext()
var context = new ModelBindingTestContext()
{
ActionContext = controllerContext,
InputFormatters = controllerContext.InputFormatters,
ActionDescriptor = actionDescriptor ?? new ControllerActionDescriptor(),
HttpContext = httpContext,
MetadataProvider = TestModelMetadataProvider.CreateDefaultProvider(),
ValidatorProvider = new CompositeModelValidatorProvider(controllerContext.ValidatorProviders),
ValueProvider = new CompositeValueProvider(controllerContext.ValueProviders),
RouteData = new RouteData(),
};
var options = services.GetRequiredService<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(
@ -74,12 +78,24 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
return new ControllerArgumentBinder(
metadataProvider,
new ModelBinderFactory(metadataProvider, options),
GetObjectValidator(metadataProvider));
GetObjectValidator(metadataProvider, options));
}
public static IObjectModelValidator GetObjectValidator(IModelMetadataProvider metadataProvider)
public static IObjectModelValidator GetObjectValidator(
IModelMetadataProvider metadataProvider,
IOptions<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(
@ -124,8 +140,6 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
return new ControllerContext(context)
{
InputFormatters = options.InputFormatters,
ValidatorProviders = options.ModelValidatorProviders,
ValueProviders = valueProviderFactoryContext.ValueProviders
};
}

View File

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

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.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
SetJsonBodyContent(request, AddressBodyContent);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -98,16 +98,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Customer.Name=bill");
SetJsonBodyContent(request, AddressBodyContent);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -139,16 +139,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
request.ContentType = "application/json";
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -181,16 +181,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.ProductId=10");
SetJsonBodyContent(request, AddressBodyContent);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -222,16 +222,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
SetJsonBodyContent(request, AddressBodyContent);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -270,16 +270,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString =
new QueryString("?parameter.Customer.Name=bill&parameter.Customer.Token=" + ByteArrayEncoded);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -314,15 +314,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Customer.Name=bill&Customer.Token=" + ByteArrayEncoded);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -357,15 +357,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -410,16 +410,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -454,16 +454,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Customer.Name=bill");
SetFormFileBodyContent(request, "Hello, World!", "Customer.Documents");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -498,17 +498,17 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Name=bill");
// Deliberately leaving out any form data.
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -542,16 +542,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.ProductId=10");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -583,16 +583,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
SetFormFileBodyContent(request, "Hello, World!", "parameter.Customer.Documents");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -624,16 +624,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -671,15 +671,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -717,15 +717,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Name=bill");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -755,15 +755,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -796,16 +796,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0]=10&parameter.ProductIds[1]=11");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -843,15 +843,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Name=bill&ProductIds[0]=10&ProductIds[1]=11");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -889,15 +889,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Name=bill");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -927,15 +927,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -968,16 +968,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductIds[0].Key=key0&parameter.ProductIds[0].Value=10");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1015,15 +1015,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Name=bill&ProductIds[0].Key=key0&ProductIds[0].Value=10");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1061,15 +1061,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Name=bill");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1099,15 +1099,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1140,16 +1140,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString =
new QueryString("?parameter.Name=bill&parameter.ProductId.Key=key0&parameter.ProductId.Value=10");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1187,15 +1187,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Name=bill&ProductId.Key=key0&ProductId.Value=10");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1233,15 +1233,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Name=bill");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1271,15 +1271,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1318,16 +1318,16 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
SetJsonBodyContent(request, AddressBodyContent);
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1366,12 +1366,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext();
var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1412,12 +1412,12 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext();
var testContext = ModelBindingTestHelper.GetTestContext();
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1461,15 +1461,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.Customer.Id=123");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1506,15 +1506,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?Customer.Id=123");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1555,15 +1555,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?customParameter.Customer.Id=123");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1606,15 +1606,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1649,15 +1649,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1688,15 +1688,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?ProductName=abc");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1731,15 +1731,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1774,15 +1774,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1813,15 +1813,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// No Data
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?OrderIds[0]=123");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1857,15 +1857,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.ProductId=");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);
@ -1901,15 +1901,15 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
};
// Need to have a key here so that the MutableObjectModelBinder will recurse to bind elements.
var operationContext = ModelBindingTestHelper.GetOperationBindingContext(request =>
var testContext = ModelBindingTestHelper.GetTestContext(request =>
{
request.QueryString = new QueryString("?parameter.ProductId");
});
var modelState = operationContext.ActionContext.ModelState;
var modelState = testContext.ModelState;
// Act
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, operationContext) ?? default(ModelBindingResult);
var modelBindingResult = await argumentBinder.BindModelAsync(parameter, testContext) ?? default(ModelBindingResult);
// Assert
Assert.True(modelBindingResult.IsModelSet);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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