Ao tentar fazer o teste dos métodos Post e Get do Swagger, estou tendo esse erro de Cors. Como resolver?
Ao tentar fazer o teste dos métodos Post e Get do Swagger, estou tendo esse erro de Cors. Como resolver?
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:
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();
});
});
// ...
}
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!
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();