Merge pull request #8086 from dotnet-maestro-bot/merge/release/2.2-to-master

[automated] Merge branch 'release/2.2' => 'master'
This commit is contained in:
Doug Bunting 2018-07-14 20:39:15 -07:00 committed by GitHub
commit 16cea4073c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 591 additions and 159 deletions

View File

@ -101,28 +101,46 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
protected ILogger Logger { get; } protected ILogger Logger { get; }
/// <summary> /// <summary>
/// Initializes and binds a model specified by <paramref name="parameter"/>. /// <para>
/// This method overload is obsolete and will be removed in a future version. The recommended alternative is
/// <see cref="BindModelAsync(ActionContext, IModelBinder, IValueProvider, ParameterDescriptor, ModelMetadata, object)" />.
/// </para>
/// <para>Initializes and binds a model specified by <paramref name="parameter"/>.</para>
/// </summary> /// </summary>
/// <param name="actionContext">The <see cref="ActionContext"/>.</param> /// <param name="actionContext">The <see cref="ActionContext"/>.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/>.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/>.</param>
/// <param name="parameter">The <see cref="ParameterDescriptor"/></param> /// <param name="parameter">The <see cref="ParameterDescriptor"/></param>
/// <returns>The result of model binding.</returns> /// <returns>The result of model binding.</returns>
[Obsolete("This method overload is obsolete and will be removed in a future version. The recommended " +
"alternative is the overload that also takes " + nameof(IModelBinder) + ", " + nameof(ModelMetadata) +
" and " + nameof(Object) + " parameters.")]
public Task<ModelBindingResult> BindModelAsync( public Task<ModelBindingResult> BindModelAsync(
ActionContext actionContext, ActionContext actionContext,
IValueProvider valueProvider, IValueProvider valueProvider,
ParameterDescriptor parameter) ParameterDescriptor parameter)
{ {
#pragma warning disable CS0618 // Type or member is obsolete
return BindModelAsync(actionContext, valueProvider, parameter, value: null); return BindModelAsync(actionContext, valueProvider, parameter, value: null);
#pragma warning restore CS0618 // Type or member is obsolete
} }
/// <summary> /// <summary>
/// <para>
/// This method overload is obsolete and will be removed in a future version. The recommended alternative is
/// <see cref="BindModelAsync(ActionContext, IModelBinder, IValueProvider, ParameterDescriptor, ModelMetadata, object)" />.
/// </para>
/// <para>
/// Binds a model specified by <paramref name="parameter"/> using <paramref name="value"/> as the initial value. /// Binds a model specified by <paramref name="parameter"/> using <paramref name="value"/> as the initial value.
/// </para>
/// </summary> /// </summary>
/// <param name="actionContext">The <see cref="ActionContext"/>.</param> /// <param name="actionContext">The <see cref="ActionContext"/>.</param>
/// <param name="valueProvider">The <see cref="IValueProvider"/>.</param> /// <param name="valueProvider">The <see cref="IValueProvider"/>.</param>
/// <param name="parameter">The <see cref="ParameterDescriptor"/></param> /// <param name="parameter">The <see cref="ParameterDescriptor"/></param>
/// <param name="value">The initial model value.</param> /// <param name="value">The initial model value.</param>
/// <returns>The result of model binding.</returns> /// <returns>The result of model binding.</returns>
[Obsolete("This method overload is obsolete and will be removed in a future version. The recommended " +
"alternative is the overload that also takes " + nameof(IModelBinder) + " and " + nameof(ModelMetadata) +
" parameters.")]
public virtual Task<ModelBindingResult> BindModelAsync( public virtual Task<ModelBindingResult> BindModelAsync(
ActionContext actionContext, ActionContext actionContext,
IValueProvider valueProvider, IValueProvider valueProvider,

View File

@ -30,7 +30,9 @@ namespace Microsoft.AspNetCore.Mvc.RazorPages.Internal
ParameterType = type, ParameterType = type,
}; };
#pragma warning disable CS0618 // Type or member is obsolete
return await _parameterBinder.BindModelAsync(pageContext, valueProvider, parameterDescriptor, value); return await _parameterBinder.BindModelAsync(pageContext, valueProvider, parameterDescriptor, value);
#pragma warning restore CS0618 // Type or member is obsolete
} }
private static async Task<CompositeValueProvider> GetCompositeValueProvider(PageContext pageContext) private static async Task<CompositeValueProvider> GetCompositeValueProvider(PageContext pageContext)

View File

@ -16,7 +16,6 @@ using Microsoft.AspNetCore.Mvc.Controllers;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Internal; using Microsoft.Extensions.Internal;
@ -450,57 +449,10 @@ namespace Microsoft.AspNetCore.Mvc.Internal
} }
} }
private class TestParameterBinder : ParameterBinder
{
private readonly IDictionary<string, object> _actionParameters;
public TestParameterBinder(IDictionary<string, object> actionParameters)
: base(
new EmptyModelMetadataProvider(),
TestModelBinderFactory.CreateDefault(),
Mock.Of<IObjectModelValidator>(),
Options.Create(new MvcOptions
{
AllowValidatingTopLevelNodes = true,
}),
NullLoggerFactory.Instance)
{
_actionParameters = actionParameters;
}
public override Task<ModelBindingResult> BindModelAsync(
ActionContext actionContext,
IValueProvider valueProvider,
ParameterDescriptor parameter,
object value)
{
if (_actionParameters.TryGetValue(parameter.Name, out var result))
{
return Task.FromResult(ModelBindingResult.Success(result));
}
return Task.FromResult(ModelBindingResult.Failed());
}
public Task BindArgumentsAsync(
ControllerContext controllerContext,
object controller,
IDictionary<string, object> arguments)
{
foreach (var entry in _actionParameters)
{
arguments.Add(entry.Key, entry.Value);
}
return Task.CompletedTask;
}
}
private sealed class TestController private sealed class TestController
{ {
} }
private enum TestResourceFilterAction private enum TestResourceFilterAction
{ {
ShortCircuit, ShortCircuit,

View File

@ -62,7 +62,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
[Theory] [Theory]
[MemberData(nameof(BindModelAsyncData))] [MemberData(nameof(BindModelAsyncData))]
public async Task BindModelAsync_PassesExpectedBindingInfoAndMetadata_IfPrefixDoesNotMatch( public async Task ObsoleteBindModelAsync_PassesExpectedBindingInfoAndMetadata_IfPrefixDoesNotMatch(
BindingInfo parameterBindingInfo, BindingInfo parameterBindingInfo,
string metadataBinderModelName, string metadataBinderModelName,
string parameterName, string parameterName,
@ -116,13 +116,15 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var controllerContext = GetControllerContext(); var controllerContext = GetControllerContext();
// Act & Assert // Act & Assert
#pragma warning disable CS0618 // Type or member is obsolete
await parameterBinder.BindModelAsync(controllerContext, new SimpleValueProvider(), parameterDescriptor); await parameterBinder.BindModelAsync(controllerContext, new SimpleValueProvider(), parameterDescriptor);
#pragma warning restore CS0618 // Type or member is obsolete
Assert.True(binderExecuted); Assert.True(binderExecuted);
} }
[Fact] [Fact]
public async Task BindModelAsync_PassesExpectedBindingInfoAndMetadata_IfPrefixMatches() public async Task ObsoleteBindModelAsync_PassesExpectedBindingInfoAndMetadata_IfPrefixMatches()
{ {
// Arrange // Arrange
var expectedModelName = "expectedName"; var expectedModelName = "expectedName";
@ -174,7 +176,9 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
var controllerContext = GetControllerContext(); var controllerContext = GetControllerContext();
// Act & Assert // Act & Assert
#pragma warning disable CS0618 // Type or member is obsolete
await argumentBinder.BindModelAsync(controllerContext, valueProvider, parameterDescriptor); await argumentBinder.BindModelAsync(controllerContext, valueProvider, parameterDescriptor);
#pragma warning restore CS0618 // Type or member is obsolete
Assert.True(binderExecuted); Assert.True(binderExecuted);
} }

View File

@ -64,6 +64,11 @@ namespace Microsoft.AspNetCore.Mvc.IntegrationTests
} }
} }
public static ParameterBinder GetParameterBinder(ModelBindingTestContext testContext)
{
return GetParameterBinder(testContext.HttpContext.RequestServices);
}
public static ParameterBinder GetParameterBinder(IServiceProvider serviceProvider) public static ParameterBinder GetParameterBinder(IServiceProvider serviceProvider)
{ {
var metadataProvider = serviceProvider.GetRequiredService<IModelMetadataProvider>(); var metadataProvider = serviceProvider.GetRequiredService<IModelMetadataProvider>();