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

Erro ao tentar deletar livro

Bom dia. Quando tento deletar um livro, aquele método que verifica se o StatusCode é 200, gera uma exceção, o problema é que eu não estou entendendo como debuggar pra saber porque está gerando essa exceção pois no método EnsureSuccessStatusCode(); não tem nenhuma mensagem detalhada. Como faço para encontrar deles do que aconteceu? Segue link do código desenvolvido na aula: https://github.com/karolinagb/Alura.WebAPI .A única mensagem que aparece é esse no navegador:

An unhandled exception occurred while processing the request.
HttpRequestException: Response status code does not indicate success: 400 (Bad Request).
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()

Stack Query Cookies Headers Routing
HttpRequestException: Response status code does not indicate success: 400 (Bad Request).
System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
Alura.ListaLeitura.HttpClients.LivroApiClient.DeleteLivroAsync(int id) in LivroApiClient.cs
+
            resposta.EnsureSuccessStatusCode();
Alura.ListaLeitura.WebApp.Controllers.LivroController.Remover(int id) in LivroController.cs
+
            await _api.DeleteLivroAsync(id);
Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask<IActionResult> actionResultValueTask)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Show raw exception details
2 respostas

Ainda não consegui resolver esse erro!

solução!

No meu caso o que estava acontecendo era algo bem simples de resolver. No método GetCapaLivroAsync da classe LivroApiClient eu tinha esqueci de colocar o sinal $ para interpolar a string nessa linha:

var resposta = await _httpClient.DeleteAsync("livros/{id}");

Dessa forma o compilador não entende que esse {id} é a variável que está sendo recebida como parâmetro então ela gera a exceção do EnsureSuccessStatusCode quando a requisição foi mal sucedida. Corrigindo ficou dessa forma:

var resposta = await _httpClient.DeleteAsync($"livros/{id}");

Agora funciona e parou de dar erro.