public async Task BindModelAsync(ModelBindingContext bindingContext) { var httpContext = bindingContext.HttpContext; var modelBindingKey = bindingContext.IsTopLevelObject ? bindingContext.BinderModelName ?? string.Empty : bindingContext.ModelName; var formatterContext = new InputFormatterContext( httpContext, modelBindingKey, bindingContext.ModelState, bindingContext.ModelMetadata, _readerFactory, true); try { var result = await _input.ReadAsync(formatterContext); if (result.HasError) { return; } if (result.IsModelSet) { var model = result.Model; bindingContext.Result = ModelBindingResult.Success(model); } else { var message = bindingContext .ModelMetadata .ModelBindingMessageProvider .MissingRequestBodyRequiredValueAccessor(); bindingContext.ModelState.AddModelError(modelBindingKey, message); } } catch (Exception exception) when(exception is InputFormatterException || ShouldHandleException(_input)) { bindingContext.ModelState.AddModelError(modelBindingKey, exception, bindingContext.ModelMetadata); } }