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

[Dúvida] Erro de CORS

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAo tentar fazer o teste dos métodos Post e Get do Swagger, estou tendo esse erro de Cors. Como resolver?

2 respostas
solução!

Olá Cindi! Como vai?

Erro de CORS (Cross-Origin Resource Sharing) pode ser um pouco chato de lidar, mas vamos resolver isso.

O CORS é um mecanismo que permite que recursos restritos em uma página da web sejam recuperados por outro domínio fora do domínio ao qual pertence o recurso que será recuperado. Quando você vê esse erro, significa que a política de CORS da sua API não está permitindo que a solicitação seja feita do domínio onde o Swagger está tentando acessar.

Para resolver esse problema na sua API ASP.NET Core, você precisa configurar a política de CORS para permitir solicitações do domínio onde o Swagger está hospedado. Aqui está um exemplo de como você pode fazer isso:

  1. No método ConfigureServices da sua classe Startup.cs, adicione o serviço CORS com uma política que permita os métodos necessários, como GET e POST, e também o domínio do Swagger se necessário:

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        services.AddCors(options =>
        {
            options.AddPolicy("MyPolicy",
                builder =>
                {
                    builder.WithOrigins("http://localhost:porta_onde_o_swagger_esta_rodando") // Substitua com a porta correta
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
        });
    
        // ...
    }
    
  2. No método Configure da sua classe Startup.cs, configure o aplicativo para usar a política de CORS que você definiu:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // ...
    
        app.UseCors("MyPolicy");
    
        // ...
    }
    

Lembre-se de substituir "http://localhost:porta_onde_o_swagger_esta_rodando" com o endereço e a porta corretos onde o Swagger está rodando. Se você estiver rodando localmente, geralmente será algo como http://localhost:5000 ou http://localhost:5001.

Após adicionar essas configurações, reinicie sua API e tente fazer o teste dos métodos Post e Get do Swagger novamente. Isso deve resolver o problema de CORS que você está enfrentando.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigada, Armano.

Eu implementei a solução dentro da classe Program.cs do ScreenSound.Api sem criar uma classe extra chamada Startup.cs e resolveu. Pelo que eu li, essa Startup.cs não vem mais como default na versão mais atual:

using Microsoft.AspNetCore.Mvc;
using ScreenSound.API.Endpoints;
using ScreenSound.Banco;
using ScreenSound.Modelos;
using System.Data.SqlTypes;
using System.Text.Json.Serialization;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<ScreenSoundContext>();
builder.Services.AddTransient<DAL<Artista>>();
builder.Services.AddTransient<DAL<Musica>>();

builder.Services.AddCors(options =>
{
    options.AddPolicy(name: "MyPolicy",
            policy =>
            {
                policy.WithOrigins("http://localhost:5197", "http://localhost:5197/Swagger/index.html",
                    "\"https://localhost:5197/Swagger/index.html\"", "https://localhost:5197")
                .AllowAnyHeader()
                .AllowAnyMethod();
            });
});

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options => options.SerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
var app = builder.Build();

app.AddEndPointsArtistas();
app.AddEndPointsMusicas();

app.UseSwagger();
app.UseSwaggerUI();

app.UseCors("MyPolicy");

app.Run();