public override async Task <InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding) { HttpRequest request = context.HttpContext.Request; bool flag = _options.SuppressInputFormatterBuffering; if (!request.Body.CanSeek && !flag) { request.EnableBuffering(); await request.Body.DrainAsync(CancellationToken.None); request.Body.Seek(0L, SeekOrigin.Begin); } using (TextReader reader = context.ReaderFactory(request.Body, encoding)) { using (JsonTextReader jsonTextReader = new JsonTextReader(reader)) { jsonTextReader.ArrayPool = _charPool; jsonTextReader.CloseInput = false; Type modelType = context.ModelType; JsonSerializer jsonSerializer = CreateJsonSerializer(); Request model; try { model = jsonSerializer.Deserialize <Request>(jsonTextReader); } finally { ReleaseJsonSerializer(jsonSerializer); } switch (model?.Data) { case null when context.TreatEmptyInputAsDefaultValue: return(await InputFormatterResult.SuccessAsync(model)); case null: return(await InputFormatterResult.NoValueAsync()); } string expectedType = modelType.GetCustomAttributes <ResourceTypeAttribute>().FirstOrDefault()?.Type; if (!string.IsNullOrWhiteSpace(model.Data.Type) && model.Data.Type.Equals(expectedType, StringComparison.OrdinalIgnoreCase)) { return(await InputFormatterResult.SuccessAsync(model.Data.Attributes.ToObject(modelType))); } BusinessApplicationException exception = new BusinessApplicationException(ExceptionType.BadRequest, ErrorCodes.ResourceType, "The provided resource type is invalid"); ApplicationError applicationError = new ApplicationError { Exception = exception, HttpStatusCode = HttpStatusCode.BadRequest }; string response = JsonConvert.SerializeObject(FormattedError.Create(applicationError.FormatError()), _jsonSerializerSettings); context.HttpContext.Response.Clear(); context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; context.HttpContext.Response.ContentType = new MediaTypeHeaderValue("application/json").ToString(); await context.HttpContext.Response.WriteAsync(response); throw exception; } } }