/// <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> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="options">The <see cref="MvcOptions"/>.</param> public BodyModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, MvcOptions options) { if (formatters == null) { throw new ArgumentNullException(nameof(formatters)); } if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } _formatters = formatters; _readerFactory = readerFactory.CreateReader; if (loggerFactory != null) { _logger = loggerFactory.CreateLogger <BodyModelBinder>(); } _options = options; }
/// <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> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> public BodyModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory) : this(formatters, readerFactory, loggerFactory, options : null) { }
/// <summary> /// Instantiates a new <see cref="SalesforceNotificationsModelBinderProvider"/> instance. /// </summary> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="options">The <see cref="MvcOptions"/>.</param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> public SalesforceNotificationsModelBinderProvider( ILoggerFactory loggerFactory, MvcOptions options, IHttpRequestStreamReaderFactory readerFactory) { _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); }
/// <summary> /// Creates a new <see cref="DynamicDtoModelBinder"/>. /// </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> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="options">The <see cref="MvcOptions"/>.</param> /// <param name="dynamicDtoTypeBuilder">Dynamic DTO builder</param> public DynamicDtoModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory?loggerFactory, MvcOptions?options, IDynamicDtoTypeBuilder dynamicDtoTypeBuilder) { if (formatters == null) { throw new ArgumentNullException(nameof(formatters)); } if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } _formatters = formatters; _readerFactory = readerFactory.CreateReader; _logger = loggerFactory?.CreateLogger <DynamicDtoModelBinder>() ?? NullLogger <DynamicDtoModelBinder> .Instance; _options = options; _dtoBuilder = dynamicDtoTypeBuilder; }
public HybridModelBinderSetup( IOptions <HybridModelBinderOptions> binderOptions, IHttpRequestStreamReaderFactory readerFactory) { this.binderOptions = binderOptions.Value; this.readerFactory = readerFactory; }
public NewtonsoftJsonModelBinder( IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, IOptions <MvcOptions> optionsProvider, IOptions <MvcNewtonsoftJsonOptions> newtonsoftOptionsProvider, ArrayPool <char> charPool, ObjectPoolProvider objectPoolProvider) { var options = optionsProvider.Value; var formatters = options.InputFormatters.ToList(); var jsonFormatter = formatters.OfType <SystemTextJsonInputFormatter>().FirstOrDefault(); var newtonsoftJsonFormatter = formatters.OfType <NewtonsoftJsonInputFormatter>().FirstOrDefault(); if (jsonFormatter != null && newtonsoftJsonFormatter == null) { var jsonFormatterIndex = formatters.IndexOf(jsonFormatter); var logger = loggerFactory.CreateLogger <NewtonsoftJsonInputFormatter>(); var settings = JsonSerializerSettingsProvider.CreateSerializerSettings(); formatters[jsonFormatterIndex] = new NewtonsoftJsonInputFormatter( logger, settings, charPool, objectPoolProvider, options, newtonsoftOptionsProvider.Value); } _bodyBinder = new BodyModelBinder(formatters, readerFactory, loggerFactory, options); }
public WebSocketIoModelBinder(ILoggerFactory loggerFactory, IHttpRequestStreamReaderFactory requestStreamReaderFactory, MvcOptions options) { _loggerFactory = loggerFactory; _requestStreamReaderFactory = requestStreamReaderFactory; _options = options; }
/// <summary> /// Creates a new <see cref="DynamicDtoModelBinder"/>. /// </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> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="dynamicDtoTypeBuilder">Dynamic DTO builder</param> public DynamicDtoModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory?loggerFactory, IDynamicDtoTypeBuilder dynamicDtoTypeBuilder) : this(formatters, readerFactory, loggerFactory, options : null, dynamicDtoTypeBuilder) { }
public MiriBodyModelBinderProvider(MiriJsonInputFormatter miriJsonInputFormatter, IHttpRequestStreamReaderFactory readerFactory) { // use a custom ModelBinderProvider to register the MiriJsonInputFormatter in the default BodyModelBinder this.formatters = new List <IInputFormatter> { miriJsonInputFormatter }; this.readerFactory = readerFactory; }
public UmbracoJsonModelBinder( ArrayPool <char> arrayPool, ObjectPoolProvider objectPoolProvider, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory) : base(GetNewtonsoftJsonFormatter(loggerFactory, arrayPool, objectPoolProvider), readerFactory, loggerFactory) { }
public WebSubContentModelBinder(IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider) { MvcOptions options = optionsAccessor?.Value ?? throw new ArgumentNullException(nameof(optionsAccessor)); _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); _metadataProvider = metadataProvider ?? throw new ArgumentNullException(nameof(metadataProvider)); }
public DefaultPassthroughHybridModelBinderProvider( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory) : base( new HybridBindingSource(), new DefaultPassthroughHybridModelBinder(formatters, readerFactory)) { }
/// <summary> /// Creates a new <see cref="BodyModelBinderProvider"/>. /// </summary> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> public BodyModelBinderProvider(IHttpRequestStreamReaderFactory readerFactory) { if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } _readerFactory = readerFactory; }
/// <summary> /// Instantiates a new <see cref="StripeVerifyNotificationIdFilter"/> instance. /// </summary> /// <param name="loggerFactory"> /// The <see cref="ILoggerFactory"/> used to initialize <see cref="WebHookSecurityFilter.Logger"/>. /// </param> /// /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="optionsAccessor"> /// The <see cref="IOptions{MvcOptions}"/> accessor for <see cref="MvcOptions"/>. /// </param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> /// <param name="receiverConfig"> /// The <see cref="IWebHookReceiverConfig"/> used to initialize /// <see cref="WebHookSecurityFilter.Configuration"/> and <see cref="WebHookSecurityFilter.ReceiverConfig"/>. /// </param> public StripeVerifyNotificationIdFilter( ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider, IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory, IWebHookReceiverConfig receiverConfig) : this(loggerFactory, metadataProvider, optionsAccessor, readerFactory, receiverConfig, httpClient : null) { }
public DefaultHybridModelBinderProvider( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, IEnumerable <string> fallbackBindingOrder) : base( new HybridBindingSource(), new DefaultHybridModelBinder(formatters, readerFactory, fallbackBindingOrder)) { }
public MyModelBinder(IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, IOptions <MvcOptions> options, IOptions <MvcJsonOptions> jsonOptions, ArrayPool <char> charPool, ObjectPoolProvider objectPoolProvider) { var formatters = options.Value.InputFormatters.ToList(); int jsonFormatterIndex = formatters.FirstIndexOf(formatter => formatter is JsonInputFormatter); JsonSerializerSettings myCustomSettings = ... formatters[jsonFormatterIndex] = new JsonInputFormatter(loggerFactory.CreateLogger("MyCustomJsonFormatter"), myCustomSettings, charPool, objectPoolProvider, options.Value, jsonOptions.Value); _bodyModelBinder = new BodyModelBinder(formatters, readerFactory, loggerFactory, options.Value); }
public MvcCoreMvcOptionsSetup(IHttpRequestStreamReaderFactory readerFactory) { if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } _readerFactory = readerFactory; }
public BodyOrOtherSourcesModelBinder(IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, IOptions <MvcOptions> options, IModelBinderFactory modelBinderFactory, IModelMetadataProvider modelMetadataProvider, ICompositeMetadataDetailsProvider detailsProvider) : base(options.Value.InputFormatters, readerFactory, loggerFactory, options.Value) { _logger = loggerFactory.CreateLogger <BodyOrOtherSourcesModelBinder>(); _modelBinderFactory = modelBinderFactory; _providers = options.Value.ModelBinderProviders.ToArray(); _modelMetadataProvider = modelMetadataProvider; _modelBindingMessageProvider = options.Value.ModelBindingMessageProvider; _detailsProvider = detailsProvider; }
public DefaultHybridModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory) { base .AddModelBinder(Body, new BodyModelBinder(formatters, readerFactory)) .AddValueProviderFactory(Form, new FormValueProviderFactory()) .AddValueProviderFactory(Route, new RouteValueProviderFactory()) .AddValueProviderFactory(QueryString, new QueryStringValueProviderFactory()); }
public NewtonsoftJsonBodyModelBinder( ILoggerFactory loggerFactory, ArrayPool <char> charPool, IHttpRequestStreamReaderFactory readerFactory, ObjectPoolProvider objectPoolProvider, IOptions <MvcOptions> mvcOptions, IOptions <MvcNewtonsoftJsonOptions> jsonOptions) : base(GetInputFormatters(loggerFactory, charPool, objectPoolProvider, mvcOptions, jsonOptions), readerFactory) { }
public HttpRouteBodyModelBinder( IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory, ArrayPool <char> charPool, ObjectPoolProvider objectPoolProvider) { _input = new NewtonsoftJsonInputFormatter( loggerFactory.CreateLogger(typeof(HttpRouteBodyModelBinder)), HttpFormatters.Route.SerializerSettings, charPool, objectPoolProvider, new MvcOptions(), new MvcNewtonsoftJsonOptions()); _readerFactory = readerFactory.CreateReader; }
public static void ConfigureMvc(MvcOptions options, IHttpRequestStreamReaderFactory readerFactory) { // Set up default error messages var messageProvider = options.ModelBindingMessageProvider; messageProvider.MissingBindRequiredValueAccessor = Resources.FormatModelBinding_MissingBindRequiredMember; messageProvider.MissingKeyOrValueAccessor = Resources.FormatKeyValuePair_BothKeyAndValueMustBePresent; messageProvider.ValueMustNotBeNullAccessor = Resources.FormatModelBinding_NullValueNotValid; messageProvider.AttemptedValueIsInvalidAccessor = Resources.FormatModelState_AttemptedValueIsInvalid; messageProvider.UnknownValueIsInvalidAccessor = Resources.FormatModelState_UnknownValueIsInvalid; messageProvider.ValueIsInvalidAccessor = Resources.FormatHtmlGeneration_ValueIsInvalid; messageProvider.ValueMustBeANumberAccessor = Resources.FormatHtmlGeneration_ValueMustBeNumber; // Set up ModelBinding options.ModelBinders.Add(new BinderTypeBasedModelBinder()); options.ModelBinders.Add(new ServicesModelBinder()); options.ModelBinders.Add(new BodyModelBinder(readerFactory)); options.ModelBinders.Add(new HeaderModelBinder()); options.ModelBinders.Add(new SimpleTypeModelBinder()); options.ModelBinders.Add(new CancellationTokenModelBinder()); options.ModelBinders.Add(new ByteArrayModelBinder()); options.ModelBinders.Add(new FormFileModelBinder()); options.ModelBinders.Add(new FormCollectionModelBinder()); options.ModelBinders.Add(new GenericModelBinder()); options.ModelBinders.Add(new MutableObjectModelBinder()); // Set up filters options.Filters.Add(new UnsupportedContentTypeFilter()); // Set up default output formatters. options.OutputFormatters.Add(new HttpNoContentOutputFormatter()); options.OutputFormatters.Add(new StringOutputFormatter()); options.OutputFormatters.Add(new StreamOutputFormatter()); // Set up ValueProviders options.ValueProviderFactories.Add(new FormValueProviderFactory()); options.ValueProviderFactories.Add(new RouteValueProviderFactory()); options.ValueProviderFactories.Add(new QueryStringValueProviderFactory()); options.ValueProviderFactories.Add(new JQueryFormValueProviderFactory()); // Set up metadata providers options.ModelMetadataDetailsProviders.Add(new DefaultBindingMetadataProvider(messageProvider)); options.ModelMetadataDetailsProviders.Add(new DefaultValidationMetadataProvider()); // Set up validators options.ModelValidatorProviders.Add(new DefaultModelValidatorProvider()); // Add types to be excluded from Validation options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(Type))); options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(Uri))); options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(CancellationToken))); options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(IFormFile))); options.ModelMetadataDetailsProviders.Add(new ValidationExcludeFilter(typeof(IFormCollection))); }
/// <summary> /// Instantiates a new <see cref="StripeVerifyNotificationIdFilter"/> instance. /// </summary> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="optionsAccessor"> /// The <see cref="IOptions{MvcOptions}"/> accessor for <see cref="MvcOptions"/>. /// </param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> public StripeVerifyNotificationIdFilter( ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider, IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory) { var options = optionsAccessor.Value; _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); _logger = loggerFactory.CreateLogger <StripeVerifyNotificationIdFilter>(); _jObjectMetadata = metadataProvider.GetMetadataForType(typeof(JObject)); }
public DefaultPassthroughHybridModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory) : base(Strategy.Passthrough) { base .AddModelBinder(Body, new BodyModelBinder(formatters, readerFactory)) .AddValueProviderFactory(Form, new FormValueProviderFactory()) .AddValueProviderFactory(Source.Route, new RouteValueProviderFactory()) .AddValueProviderFactory(Source.QueryString, new QueryStringValueProviderFactory()) .AddValueProviderFactory(Header, new HeaderValueProviderFactory()); }
/// <summary> /// Instantiates a new <see cref="WebHookRequestReader"/> instance. /// </summary> /// <param name="loggerFactory">The <see cref="ILoggerFactory"/>.</param> /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="optionsAccessor"> /// The <see cref="IOptions{MvcOptions}"/> accessor for <see cref="MvcOptions"/>. /// </param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> public WebHookRequestReader( ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider, IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory) { // Do not store options.ValueProviderFactories because that is only the initial value of (for example) // ResourceExecutingContext.ValueProviderFactories. var options = optionsAccessor.Value; _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); _metadataProvider = metadataProvider; }
/// <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> /// <param name="loggerFactory">The <see cref="ILoggerFactory" />.</param> public BodyModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, ILoggerFactory loggerFactory) : base(loggerFactory.CreateLogger <BodyModelBinder>()) { if (readerFactory == null) { throw new ArgumentNullException(nameof(readerFactory)); } _formatters = formatters ?? throw new ArgumentNullException(nameof(formatters)); _readerFactory = readerFactory.CreateReader; }
public DefaultPassthroughHybridModelBinder( IList <IInputFormatter> formatters, IHttpRequestStreamReaderFactory readerFactory, IEnumerable <string> fallbackBindingOrder) : base(Strategy.Passthrough, fallbackBindingOrder) { base .AddModelBinder(Body, new BodyModelBinder(formatters, readerFactory)) .AddValueProviderFactory(Form, new FormValueProviderFactory()) .AddValueProviderFactory(Route, new RouteValueProviderFactory()) .AddValueProviderFactory(QueryString, new QueryStringValueProviderFactory()) .AddValueProviderFactory(Header, new HeaderValueProviderFactory()); }
public DynamicModelBinder(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; }
/// <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(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; }
/// <summary> /// Instantiates a new <see cref="SalesforceVerifyOrganizationIdFilter"/> instance. /// </summary> /// <param name="loggerFactory"> /// The <see cref="ILoggerFactory"/> used to initialize <see cref="WebHookSecurityFilter.Logger"/>. /// </param> /// /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="optionsAccessor"> /// The <see cref="IOptions{MvcOptions}"/> accessor for <see cref="MvcOptions"/>. /// </param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> /// <param name="receiverConfig"> /// The <see cref="IWebHookReceiverConfig"/> used to initialize /// <see cref="WebHookSecurityFilter.Configuration"/> and <see cref="WebHookSecurityFilter.ReceiverConfig"/>. /// </param> /// <param name="resultCreator">The <see cref="ISalesforceResultCreator"/>.</param> public SalesforceVerifyOrganizationIdFilter( ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider, IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory, IWebHookReceiverConfig receiverConfig, ISalesforceResultCreator resultCreator) : base(loggerFactory, receiverConfig) { var options = optionsAccessor.Value; _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); _resultCreator = resultCreator; _xElementMetadata = metadataProvider.GetMetadataForType(typeof(XElement)); }
/// <summary> /// Instantiates a new <see cref="SalesforceVerifyOrganizationIdFilter"/> instance. /// </summary> /// <param name="configuration"> /// The <see cref="IConfiguration"/> used to initialize <see cref="WebHookSecurityFilter.Configuration"/>. /// </param> /// <param name="hostingEnvironment"> /// The <see cref="IHostingEnvironment" /> used to initialize /// <see cref="WebHookSecurityFilter.HostingEnvironment"/>. /// </param> /// <param name="loggerFactory"> /// The <see cref="ILoggerFactory"/> used to initialize <see cref="WebHookSecurityFilter.Logger"/>. /// </param> /// /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param> /// <param name="optionsAccessor"> /// The <see cref="IOptions{MvcOptions}"/> accessor for <see cref="MvcOptions"/>. /// </param> /// <param name="readerFactory">The <see cref="IHttpRequestStreamReaderFactory"/>.</param> /// <param name="resultCreator">The <see cref="ISalesforceResultCreator"/>.</param> public SalesforceVerifyOrganizationIdFilter( IConfiguration configuration, IHostingEnvironment hostingEnvironment, ILoggerFactory loggerFactory, IModelMetadataProvider metadataProvider, IOptions <MvcOptions> optionsAccessor, IHttpRequestStreamReaderFactory readerFactory, ISalesforceResultCreator resultCreator) : base(configuration, hostingEnvironment, loggerFactory) { var options = optionsAccessor.Value; _bodyModelBinder = new BodyModelBinder(options.InputFormatters, readerFactory, loggerFactory, options); _resultCreator = resultCreator; _xElementMetadata = metadataProvider.GetMetadataForType(typeof(XElement)); }
/// <summary> /// Creates a new <see cref="BodyModelBinder"/>. /// </summary> /// <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) { _readerFactory = readerFactory.CreateReader; }