4
respostas

Erro ao fazer a requisição para imagem vazia de capa

Quando faço a requisição tanto pelo Postman quanto pela aplicação não consigo receber a imagem capa-vazia.png.

URI: http://localhost:6000/api/livros/4011/capa

[HttpGet("{id}/capa")] public IActionResult ImagemCapa(int id) { byte[] img = _repo.All .Where(l => l.Id == id) .Select(l => l.ImagemCapa) .FirstOrDefault(); if (img != null) { return File(img, "image/png"); } return File("~/images/capas/capa-vazia.png", "image/png"); }

Pela aplicação, não traz a imagem e pelo Postman apresenta o seguinte erro:

Erro: 500 Internal Server Error

System.InvalidOperationException: No file provider has been configured to process the supplied file. at Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.GetFileInformation(VirtualFileResult result) at Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.ExecuteAsync(ActionContext context, VirtualFileResult result) at Microsoft.AspNetCore.Mvc.VirtualFileResult.ExecuteResultAsync(ActionContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsyncTFilter,TFilterAsync at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync() at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync() at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Preciso colocar alguma outra configuração no retorno return File("~/images/capas/capa-vazia.png", "image/png"); ?

4 respostas

Alexandre, boa tarde.

Dá uma olhada nessa imagem e confirma se ela está sendo copiada para a saída, assim: clica na imagem, Propriedades, opção Copiar para Diretório de Saída. Veja se está "Copiar Sempre".

Depois me dá um feedback aqui, por favor.

Daniel, obrigado pelo retorno. Segui sua sugestão adicionando a imagem na saída, mas não mudou o resultado. Continua apresentando erro para o tipo de retorno VirtualFileResult. return File("~/images/capas/capa-vazia.png", "image/png");

{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers: { Date: Tue, 22 Oct 2019 13:43:36 GMT Server: Kestrel Transfer-Encoding: chunked Content-Type: text/html; charset=utf-8 }}

Content = {System.Net.Http.HttpConnection.HttpConnectionResponseContent} Headers = {Date: Tue, 22 Oct 2019 13:43:36 GMT Server: Kestrel Transfer-Encoding: chunked } IsSuccessStatusCode = false ReasonPhrase = "Internal Server Error" RequestMessage = {Method: GET, RequestUri: 'http://localhost:6000/api/livros/4011/capa', Version: 2.0, Content: , Headers: { Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGV4YW5kcmUiLCJqdGkiOiJlNTI5MDJjOS02ZjUyLTRjOWItODRjNS1mYTg3NTAxYmZk... StatusCode = InternalServerError Version = {1.1}

Para contornar o problema, mudei o tipo de retorno e estou recuperando a imagem Capa-Vazia no controller da aplicação.

Alexandre, boa tarde.

Vou pesquisar mais sobre o erro (No file provider has been configured to process the supplied file). Não tive esse problema nesse projeto.

Qual a versão do AspNet Core que está usando?

Boa tarde Daniel.

Estava assim: Alura.WebApi.Api = .NET Core 2.2 Alura.WebApi.AuthProvider = .NET Core 2.2 Alura.WebAPI.WebApp = .NET Core 2.1

Fiz um teste deixando assim: Alura.WebApi.Api = .NET Core 2.1 Alura.WebApi.AuthProvider = .NET Core 2.1 Alura.WebAPI.WebApp = .NET Core 2.1

Pacotes instalados no Nuget (Alura.WebApi.Api): Microsoft.AspNetCore.App - 2.1.1 Microsoft.AspNetCore.Razor.Design - 2.1.1 Microsoft.NETCore.App - 2.1.0

Sem mudanças no resultado.