1
resposta

BadRequest na função PostLivroAsync

Ao fazer executar o POST de Livro, na linha que testa o Status Code, gera a seguinte excessão:

![](HttpRequestException: Response status code does not indicate success: 400 Bad Request )

Ps.: Ao executar a mesma requisição pelo Postman, funciona normalmente.

Segue os códigos da classe LivroApiClient:

private string EntreAspas(string texto)
        {
            return $"\"{texto}\"";
        }

        private HttpContent CreateMultpartFormDataContent(LivroUpload model)
        {
            MultipartFormDataContent content = new MultipartFormDataContent();

            content.Add(new StringContent(model.Titulo), EntreAspas("titulo"));
            content.Add(new StringContent(model.Subtitulo), EntreAspas("subtitulo"));
            content.Add(new StringContent(model.Resumo), EntreAspas("resumo"));
            content.Add(new StringContent(model.Autor), EntreAspas("autor"));
            content.Add(new StringContent(model.Lista.ParaString()), EntreAspas("lista"));

            if (model.Capa != null)
            {
                var imageContent = new ByteArrayContent(model.Capa.ConvertToBytes());
                imageContent.Headers.Add("content-type", "image/png");
                content.Add(
                    imageContent,
                    EntreAspas("capa"),
                    EntreAspas("capa.png")
                    );
            }

            return content;
        }

        public async Task PostLivroAsync(LivroUpload model)
        {
            HttpContent content = CreateMultpartFormDataContent(model);
            HttpResponseMessage resposta = await _httpClient.PostAsync($"livros", content);
            resposta.EnsureSuccessStatusCode();
        }

Segue também a chamada da API na classe LivroController:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Novo(LivroUpload model)
        {
            if (ModelState.IsValid)
            {
                await _api.PostLivroAsync(model);
                return RedirectToAction("Index", "Home");
            }
            return View(model);
        }
1 resposta

Na classe LivroController no método Incluir, é necessário substituir a assinatura de

public IActionResult Incluir(**[FromBody]**LivroUpload model)

para

public IActionResult Incluir(**[FromForm]**LivroUpload model)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software