Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Multipart Erro Serialização

Olá, alguém poderia me explicar um pouco melhor essa parte de serialização do MultiPart.... Fiz o código exatamente como na aula porém estou recebendo o seguinte erro:

 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Route matched with {action = "Incluir", controller = "Livros"}. Executing action Alura.ListaLeitura.Api.Controllers.LivrosController.Incluir (Alura.WebAPI.Api)
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.1.8-servicing-32085 initialized 'LeituraContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (49ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE') SELECT 1 ELSE SELECT 0
info: Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor[1]
      Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.SerializableError'.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action Alura.ListaLeitura.Api.Controllers.LivrosController.Incluir (Alura.WebAPI.Api) in 2876.8133ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 2926.7837ms 400 application/json; charset=utf-8
`

Aparentemente ele deu algum erro dna hora de serializar... porém não sei como resolver... Se alguém puder me ajudar... Obrigado.

2 respostas

No caso esse é o código usado ele retorna erro na linha do Response.

private string EnvolveComAspasDuplas(string valor) => $"\"{valor}\"";


        private HttpContent CreateMultipartFormDataContent(LivroUpload model)
        {
            var content = new MultipartFormDataContent
            {
                { new StringContent(model.Titulo), EnvolveComAspasDuplas("titulo") },
                { new StringContent(model.Subtitulo), EnvolveComAspasDuplas("subtitulo") },
                { new StringContent(model.Resumo), EnvolveComAspasDuplas("resumo") },
                { new StringContent(model.Autor), EnvolveComAspasDuplas("autor") },
                { new StringContent(model.Lista.ParaString()), EnvolveComAspasDuplas("lista") }
            };

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

            return content;
        }

        public async Task PostLivroAsync(LivroUpload model)
        {
            HttpContent content = CreateMultipartFormDataContent(model);
            HttpResponseMessage response = await _httpClient.PostAsync("Livros", content);
            response.EnsureSuccessStatusCode();
        }
solução!

Desculpem, não fui paciente, como vou fazendo o código e acompanhando o professor fazendo o código, só mais tarde no vídeo é explicado que tem trocar o prefixo [FromBody] da API para [FromForm].

O problema era esse, desculpem o tópico sem necessidade.