parent
077b1d87a9
commit
49c653ed0b
|
|
@ -96,6 +96,7 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
|||
modelMetadataDetailsProviders.Add(new BindingSourceMetadataProvider(typeof(IFormFile), BindingSource.FormFile));
|
||||
modelMetadataDetailsProviders.Add(new BindingSourceMetadataProvider(typeof(IFormCollection), BindingSource.FormFile));
|
||||
modelMetadataDetailsProviders.Add(new BindingSourceMetadataProvider(typeof(IFormFileCollection), BindingSource.FormFile));
|
||||
modelMetadataDetailsProviders.Add(new BindingSourceMetadataProvider(typeof(IEnumerable<IFormFile>), BindingSource.FormFile));
|
||||
|
||||
// Add types to be excluded from Validation
|
||||
modelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Type)));
|
||||
|
|
|
|||
|
|
@ -211,6 +211,52 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
|||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnProvidersExecuting_InfersFormFileSourceForTypesAssignableFromIEnumerableOfFormFiles()
|
||||
{
|
||||
// Arrange
|
||||
var builder = new TestApplicationModelProvider(
|
||||
new MvcOptions { AllowValidatingTopLevelNodes = true },
|
||||
TestModelMetadataProvider.CreateDefaultProvider());
|
||||
var typeInfo = typeof(ModelBinderController).GetTypeInfo();
|
||||
|
||||
var context = new ApplicationModelProviderContext(new[] { typeInfo });
|
||||
|
||||
// Act
|
||||
builder.OnProvidersExecuting(context);
|
||||
|
||||
// Assert
|
||||
var controllerModel = Assert.Single(context.Result.Controllers);
|
||||
var action = Assert.Single(controllerModel.Actions, a => a.ActionMethod.Name == nameof(ModelBinderController.FormFilesSequences));
|
||||
Assert.Collection(
|
||||
action.Parameters,
|
||||
parameter =>
|
||||
{
|
||||
Assert.Equal("formFileEnumerable", parameter.ParameterName);
|
||||
Assert.Equal(BindingSource.FormFile, parameter.BindingInfo.BindingSource);
|
||||
},
|
||||
parameter =>
|
||||
{
|
||||
Assert.Equal("formFileCollection", parameter.ParameterName);
|
||||
Assert.Equal(BindingSource.FormFile, parameter.BindingInfo.BindingSource);
|
||||
},
|
||||
parameter =>
|
||||
{
|
||||
Assert.Equal("formFileIList", parameter.ParameterName);
|
||||
Assert.Equal(BindingSource.FormFile, parameter.BindingInfo.BindingSource);
|
||||
},
|
||||
parameter =>
|
||||
{
|
||||
Assert.Equal("formFileList", parameter.ParameterName);
|
||||
Assert.Equal(BindingSource.FormFile, parameter.BindingInfo.BindingSource);
|
||||
},
|
||||
parameter =>
|
||||
{
|
||||
Assert.Equal("formFileArray", parameter.ParameterName);
|
||||
Assert.Equal(BindingSource.FormFile, parameter.BindingInfo.BindingSource);
|
||||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void OnProvidersExecuting_AddsBindingSources_ForActionParameters_ReadFromModelMetadata()
|
||||
{
|
||||
|
|
@ -1625,6 +1671,13 @@ namespace Microsoft.AspNetCore.Mvc.Internal
|
|||
|
||||
public IActionResult PostAction([FromQuery] string fromQuery, IFormFileCollection formFileCollection, string unbound) => null;
|
||||
|
||||
public IActionResult FormFilesSequences(
|
||||
IEnumerable<IFormFile> formFileEnumerable,
|
||||
ICollection<IFormFile> formFileCollection,
|
||||
IList<IFormFile> formFileIList,
|
||||
List<IFormFile> formFileList,
|
||||
IFormFile[] formFileArray) => null;
|
||||
|
||||
public IActionResult PostAction1(Guid guid) => null;
|
||||
|
||||
public IActionResult PostAction2([FromQuery] Guid fromQuery) => null;
|
||||
|
|
|
|||
|
|
@ -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.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
|
@ -189,6 +190,12 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
Assert.Equal(BindingSource.FormFile, formFileParameter.BindingSource);
|
||||
},
|
||||
provider =>
|
||||
{
|
||||
var formFileParameter = Assert.IsType<BindingSourceMetadataProvider>(provider);
|
||||
Assert.Equal(typeof(IEnumerable<IFormFile>), formFileParameter.Type);
|
||||
Assert.Equal(BindingSource.FormFile, formFileParameter.BindingSource);
|
||||
},
|
||||
provider =>
|
||||
{
|
||||
var excludeFilter = Assert.IsType<SuppressChildValidationMetadataProvider>(provider);
|
||||
Assert.Equal(typeof(Type), excludeFilter.Type);
|
||||
|
|
|
|||
Loading…
Reference in New Issue