/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Mvc/test/Mvc.IntegrationTests/ParameterBinderExtensions.cs
82 строки
3 KB
Shreyas Jejurkar
chore : Remove unwanted `using` statement (#39176)
02 янв 2022, 17:39
Не верифицирован
02 янв 2022, 17:39
c85baf8
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Reflection; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace Microsoft.AspNetCore.Mvc.IntegrationTests; public static class ParameterBinderExtensions { public static Task<ModelBindingResult> BindModelAsync( this ParameterBinder parameterBinder, ParameterDescriptor parameter, ControllerContext context) { var optionsAccessor = context.HttpContext.RequestServices.GetService<IOptions<MvcOptions>>(); Assert.NotNull(optionsAccessor?.Value); // Guard var modelMetadataProvider = context.HttpContext.RequestServices.GetService<IModelMetadataProvider>(); Assert.NotNull(modelMetadataProvider); // Guard // Imitate a bit of ControllerBinderDelegateProvider and PageBinderFactory ParameterInfo parameterInfo; if (parameter is ControllerParameterDescriptor controllerParameterDescriptor) { parameterInfo = controllerParameterDescriptor.ParameterInfo; } else if (parameter is HandlerParameterDescriptor handlerParameterDescriptor) { parameterInfo = handlerParameterDescriptor.ParameterInfo; } else { parameterInfo = null; } ModelMetadata metadata; if (modelMetadataProvider is ModelMetadataProvider modelMetadataProviderBase && parameterInfo != null) { metadata = modelMetadataProviderBase.GetMetadataForParameter(parameterInfo); } else { metadata = modelMetadataProvider.GetMetadataForType(parameter.ParameterType); } return parameterBinder.BindModelAsync(parameter, context, modelMetadataProvider, metadata); } public static async Task<ModelBindingResult> BindModelAsync( this ParameterBinder parameterBinder, ParameterDescriptor parameter, ControllerContext context, IModelMetadataProvider modelMetadataProvider, ModelMetadata modelMetadata) { var valueProvider = await CompositeValueProvider.CreateAsync(context); var modelBinderFactory = ModelBindingTestHelper.GetModelBinderFactory( modelMetadataProvider, context.HttpContext.RequestServices); var modelBinder = modelBinderFactory.CreateBinder(new ModelBinderFactoryContext { BindingInfo = parameter.BindingInfo, Metadata = modelMetadata, CacheToken = parameter, }); return await parameterBinder.BindModelAsync( context, modelBinder, valueProvider, parameter, modelMetadata, value: null); } }