Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Internal Server Error

Segui o código do professor, mas não estou conseguindo Adicionar e nem Alterar, recebo esse erro:

HttpRequestException: Response status code does not indicate success: 400 (Bad Request).
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
Alura.ListaLeitura.HttpClients.LivroApiClient.PostLivroAsync(LivroUpload model) in LivroApiClient.cs
+
            resposta.EnsureSuccessStatusCode();
Alura.ListaLeitura.WebApp.Controllers.LivroController.Novo(LivroUpload model) in LivroController.cs
+
                await _api.PostLivroAsync(model);
Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
10 respostas

Suellen, boa tarde, copia aqui pra mim o código que vc está usando no LivroApiClient.PostLivroAsync(), por favor...

Segue o código

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

Oi, Suellen, bom dia. Duas coisas pra gt conferir:

  1. só por desencargo copia aqui também o método CreateMultipartFormDataContent()

  2. o erro BadRequest indica algum campo obrigatório ausente ou com dados errados. Como você está testando a inclusão de um livro?

Fico no aguardo.

Com o ctrl+F5 eu rodo o Alura.WebAPI.Api e o Alura.WebAPI.AuthProvider. Depois coloco para rodar a aplicação no browser.

Segue o código:

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

            content.Add(new StringContent(model.Titulo), EnvolveComAspasDuplas("titulo"));
            content.Add(new StringContent(model.Lista.ParaString()), EnvolveComAspasDuplas("lista"));

            if (!string.IsNullOrEmpty(model.Subtitulo))
            {
                content.Add(new StringContent(model.Subtitulo), EnvolveComAspasDuplas("subtitulo"));
            }

            if (!string.IsNullOrEmpty(model.Resumo))
            {
                content.Add(new StringContent(model.Resumo), EnvolveComAspasDuplas("resumo"));
            }

            if (!string.IsNullOrEmpty(model.Autor))
            {
                content.Add(new StringContent(model.Autor), EnvolveComAspasDuplas("autor"));
            }

            if (model.Id > 0)
            {
                content.Add(new StringContent(model.Id.ToString()), EnvolveComAspasDuplas("id"));
            }

            if (model.Capa != null)
            {
                var imagemContent = new ByteArrayContent(model.Capa.ConvertToBytes());

                imagemContent.Headers.Add("content-type", "image/png");
                content.Add(
                    imagemContent, 
                    EnvolveComAspasDuplas("capa"),
                    EnvolveComAspasDuplas("capa.png")
                );
            }

            return content;
        }

Eu recebo esse mesmo erro na Home também, mas quando atualizo a página, ele carrega os livros.

Alguma ideia do que pode ser?

Suellen, bom dia.

O código que vc passou está ok. Então deve ter algum problema na entrada de dados no momento de incluir o livro. Tente digitar todas as informações do formulário além de colocar uma imagem do tipo png.

Depois me dá um feedback aqui.

Não funcionou. Vou refazer e ver o que dá.

Suellen, boa tarde. Vc sabe/consegue depurar a WebAPI? Basta em vez de iniciar com Ctrl+F5 usar o atalho F5. Mas pra rodar a aplicação Web precisará de outro Visual Studio rodando.

Feito isso refaça o teste e verifique qual erro vai aparecer dentro do Visual Studio que está rodando a Web API. E me dá um feedback aqui, pf.

solução!

Eu refiz as aulas 1, 2, 3 no meu computador pessoal e não tive mais nenhum erro. Quando aconteceu esses erros eu estava utilizando o computador da empresa e parece que o problema foi por causa do Proxy.