2
respostas

[Bug] Não consigo acionar as apis pelo swagger

Consigo fazer a gravação de dados pelo postman corretamente, porém pelo swagger ocorre esse erro.

Sabe o problema ?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá, José! Tudo bem?

Pelo erro que aparece na imagem ("Failed to fetch. Possible Reasons: CORS, Network Failure, URL scheme must be "http" or "https" for CORS request."), o problema mais provável é o CORS (Cross-Origin Resource Sharing).

O CORS é um mecanismo de segurança implementado pelos navegadores para restringir que um site rodando em uma origem (domínio, protocolo e porta) diferente da origem do servidor da API faça requisições para esse servidor.

Por que funciona no Postman e não no Swagger (rodando no navegador)?

  • Postman: O Postman é uma ferramenta desktop e não está sujeito às mesmas restrições de segurança de CORS impostas pelos navegadores. Ele consegue fazer requisições para qualquer origem sem problemas.
  • Swagger (no navegador): Quando você acessa a interface do Swagger no seu navegador, ela está rodando em uma determinada origem (por exemplo, http://localhost:algumporta). Se a sua API estiver rodando em uma origem diferente (por exemplo, http://localhost:5090, como parece ser o caso), o navegador pode bloquear a requisição devido às políticas de CORS.

Possíveis soluções:

  1. Configurar o CORS no seu servidor da API: Essa é a solução mais comum e recomendada. Você precisa configurar o seu backend (a API que você está tentando acessar) para permitir requisições da origem onde o Swagger está rodando. Isso geralmente envolve adicionar headers específicos nas respostas HTTP da sua API, como:

    • Access-Control-Allow-Origin: Especifica quais origens têm permissão para acessar os recursos. Você pode definir um domínio específico (por exemplo, http://localhost:a-porta-do-swagger) ou usar * para permitir todas as origens (não recomendado para produção).
    • Access-Control-Allow-Methods: Especifica quais métodos HTTP (POST, GET, PUT, DELETE, etc.) são permitidos para a origem especificada.
    • Access-Control-Allow-Headers: Especifica quais headers personalizados podem ser enviados na requisição.

    Como configurar o CORS depende da linguagem e do framework que você está usando no seu backend. Por exemplo:

    • Node.js com Express: Você pode usar um middleware como cors.
    • Spring Boot (Java): Você pode usar a anotação @CrossOrigin ou configurar o CORS globalmente.
    • .NET Core: Você pode configurar o CORS no Startup.cs.
  2. Verificar se o Swagger está rodando na mesma origem da API (improvável em desenvolvimento): Em um ambiente de desenvolvimento, é comum que o frontend (Swagger) e o backend (API) rodem em portas diferentes no localhost.

  3. Verificar se não há nenhum problema de rede: Embora o erro mencione "Network Failure", como funciona no Postman, é menos provável que seja um problema de rede geral. No entanto, pode haver alguma configuração no seu navegador ou rede que esteja interferindo.

  4. Certificar-se de que o esquema da URL é HTTP ou HTTPS: O erro também menciona que o esquema da URL deve ser "http" ou "https" para requisições CORS. Pela sua imagem, a URL da API parece ser http://localhost:5090/Filme, o que está correto nesse aspecto.

Espero ter ajudado e bons estudos!

Funcionou

Alteração no program.cs

//politica cors builder.Services.AddCors(options => { options.AddPolicy("MinhaPolitica", builder => { builder.WithOrigins("http://localhost:5090") .AllowAnyMethod() .AllowAnyHeader(); }); });

// Aplica a política app.UseCors("MinhaPolitica");