/// <inheritdoc /> public override async Task <InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding) { string productBody = null; using (var streamReader = context.ReaderFactory(context.HttpContext.Request.Body, encoding)) productBody = await streamReader.ReadToEndAsync(); if (string.IsNullOrWhiteSpace(productBody)) { return(InputFormatterResult.NoValue()); } var productBodyParts = productBody //productBody должен выглядеть, как "Name=Имя~Description=Описание" .Split(FIELD_SEPARATOR, StringSplitOptions.RemoveEmptyEntries) //Разбиваем на описание полей new[] {"Name=Страховой коробочный продукт", "Description=Описание"} .Select(bp => bp.Split(VALUE_SEPARATOR).ToList()) //Далее получаем коллекцию колекций, new[] {new[] {"Name","Страховой коробочный продукт"}, new[]{"Description","Описание"}} .Select(x => x.Append(null).ToList()) //Добавляем во внутреннии коллекции пустой элемент, чтобы корректно обработать пустые описания .ToDictionary(x => x[0], x => x[1]); //Собираем всё в словарь имя поля => значение var productInfo = new ProductInputViewModel(); if (productBodyParts.ContainsKey(nameof(Product.Name))) { productInfo.Name = productBodyParts[nameof(Product.Name)]; } if (productBodyParts.ContainsKey(nameof(Product.Description))) { productInfo.Description = productBodyParts[nameof(Product.Description)]; } return(InputFormatterResult.Success(productInfo)); }
public async Task <ActionResult <Product> > Post([FromBody] ProductInputViewModel inputProductViewModel) { using (var dbContext = _dbContextFactory.GetApplicationContext()) { var newProduct = inputProductViewModel.GetCopyToInsert(); await dbContext .Set <Product>() .AddAsync(newProduct); dbContext.Commit(); return(newProduct); } this.ValidationProblem(); }