Não tenho certeza do que estou perdendo, mas parece que a minha política de CORS não está funcionando com o .NET Core 3.1 e o Angular 8 do lado do cliente.
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
// Add CORS policy
services.AddCors(options =>
{
options.AddPolicy("foo",
builder =>
{
// Not a permanent solution, but just trying to isolate the problem
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
// Use the CORS policy
app.UseCors("foo");
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Mensagem de erro do lado do cliente:
Access to XMLHttpRequest at 'https://localhost:8082/api/auth/' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
ATUALIZAR:
Embora eu estivesse configurando o CORS incorretamente (e a resposta aceita abaixo ajudou de fato com isso), a raiz do problema não estava relacionada. Para um contexto adicional, o aplicativo estava funcionando completamente bem ao executar a API e o aplicativo Angular usando a CLI - eu só estava tendo esse problema depois de implantá-los em um servidor da web.
O problema "real" acabou relacionado à conexão SQL, que eu descobri depois de adicionar o log de erro de arquivo simples à API e executar um rastreamento do SQL Server para descobrir que o aplicativo não conseguiu se conectar ao SQL.
Normalmente, eu esperaria que isso retornasse apenas 500 e eu teria percebido o problema em questão de 10 segundos - no entanto, a configuração incorreta do CORS significava que um 500 nunca era realmente retornado porque o middleware do CORS falhou primeiro. Isso foi imensamente frustrante para dizer o mínimo! . No entanto, quero acrescentar isso aqui, caso outras pessoas se encontrem nessa situação, pois eu estava "perseguindo o coelho errado", se quiser. Depois de corrigir a configuração do CORS, percebi que o problema real não estava totalmente relacionado ao CORS.
TL; DR; - Às vezes, erros do lado do servidor .NET "não-CORS" podem ser retornados como erros CORS se as diretivas CORS não estiverem definidas corretamente
Referências:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
antesapp.UseHttpsRedirection();
Respostas:
primeiro
app.UseRouting();
entãoapp.UseCors("foo");
Altere seu
Configure
método da seguinte maneira:Funcionou para mim!
fonte
ConfigureServices
código do OP resolveu meu problema. Muito obrigado!API da Web está usando
app.UseHttpsRedirection()
; que causamCORS
problemas se a solicitação do cliente não sehttps
baseia. Portanto, para usá-lo com ohttp
cliente, precisamos comentar ou remover essa linha.Esse problema não está
CORS
ocorrendo, o https está causando esse problema, mas o erro gerado está dizendo que está com o CORS.fonte
Experimente este utilitário
https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ Com isso, você pode ativar / desativar os cors no aplicativo principal .net
fonte
Como você está usando localhost as
http://localhost:4200
, tente configurá-lo em sua configuração:E
Configure
método:fonte
Ao adicionar o Serviço Cors, certifique-se de incluir
.SetIsOriginAllowed((host) => true)
após.WithOrigins("http://localhost:4200")
fonte