public async Task PostLivroAsync(LivroUpload model)
{
HttpContent content = CreateMultipartFormDataContent(model);
var resposta = await _httpClient.PostAsync("livros", content);
resposta.EnsureSuccessStatusCode(); //se não for cód 200, lança exception.
}
private string EnvolveComAspasDuplas(string valor)
{
return $"\"{valor}\"";
}
private HttpContent CreateMultipartFormDataContent(LivroUpload model)
{
var content = new MultipartFormDataContent();
content.Add(new StringContent(model.Titulo), EnvolveComAspasDuplas("titulo"));
content.Add(new StringContent(model.Subtitulo), EnvolveComAspasDuplas("subtitulo"));
content.Add(new StringContent(model.Resumo), EnvolveComAspasDuplas("resumo"));
content.Add(new StringContent(model.Autor), EnvolveComAspasDuplas("autor"));
content.Add(new StringContent(model.Lista.ParaString()), EnvolveComAspasDuplas("lista"));
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;
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Novo(LivroUpload model)
{
if (ModelState.IsValid)
{
await _api.PostLivroAsync(model);
return RedirectToAction("Index", "Home");
}
return View(model);
}
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
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(); //se não for cód 200, lança exception.
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)