Solucionado (ver solução)
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.