Nie jestem pewien, czego mi brakuje, ale wydaje mi się, że moje zasady CORS nie współpracują z .NET Core 3.1 i Angular 8 po stronie klienta.
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();
});
}
Komunikat o błędzie po stronie klienta:
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.
AKTUALIZACJA:
Mimo, że był konfigurowania CORS niepoprawnie (i poniżej akceptowanego odpowiedź rzeczywiście w tym pomóc) źródłem emisji było niezależne. Dla dodatkowego kontekstu aplikacja działała całkowicie dobrze podczas uruchamiania interfejsu API i aplikacji Angular przy użyciu interfejsu CLI - ten problem występował dopiero po wdrożeniu ich obu na serwerze WWW.
„Rzeczywisty” problem zakończony został związany z połączenia SQL, którą odkryto dopiero po dodaniu rejestrowanie błędów płaskim pliku do API i działa ślad SQL Server do stwierdzenia, że aplikacja nie była w stanie połączyć się z SQL w ogóle.
Zwykle spodziewałbym się, że zwróci to 500 i zdałbym sobie sprawę z tego problemu w ciągu 10 sekund - jednak błędna konfiguracja CORS oznaczała, że 500 nigdy nie zostało zwrócone, ponieważ oprogramowanie pośrednie CORS zawiodło jako pierwsze. To było niezwykle frustrujące, mówiąc absolutnie! . Chciałbym jednak dodać to tutaj, na wypadek, gdyby inni znaleźli się w takiej sytuacji, ponieważ „ścigałem niewłaściwego królika”, jeśli wolisz. Po naprawieniu konfiguracji CORS zdałem sobie sprawę, że faktyczny problem był całkowicie niezwiązany z CORS.
TL; DR; - Czasami błędy po stronie serwera „non-CORS” .NET mogą zostać zwrócone jako błędy CORS, jeśli zasady CORS nie są ustawione poprawnie
Bibliografia:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
wcześniejapp.UseHttpsRedirection();