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();
Odpowiedzi:
najpierw
app.UseRouting();
więcapp.UseCors("foo");
Zmień
Configure
metodę w następujący sposób:To zadziałało dla mnie!
źródło
ConfigureServices
kodem OP rozwiązało mój problem. Wielkie dzięki!Interfejs API sieci Web jest używany
app.UseHttpsRedirection()
; które powodująCORS
problem, jeśli żądanie klienta nie jesthttps
oparte. Aby więc użyć go zhttp
klientem, musimy skomentować lub usunąć tę linię.Ten problem nie występuje
CORS
, https powoduje ten problem, ale zgłoszony błąd mówi, że dotyczy CORS.źródło
Spróbuj tego
https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ Za pomocą tego możesz włączyć / wyłączyć cors w swojej podstawowej aplikacji .net
źródło
Ponieważ używasz localhost as
http://localhost:4200
, spróbuj ustawić go w swojej konfiguracji:I
Configure
metoda:źródło
Dodając usługę Cors, pamiętaj o dodaniu
.SetIsOriginAllowed((host) => true)
po.WithOrigins("http://localhost:4200")
źródło
DLA .NET CORE 3.1
Najlepszym sposobem jest przechowywanie ścieżki źródłowej w pliku app.settings
aw
ConfigureServices
metodzie zdefiniuj początki z sekcji konfiguracjiNa koniec po prostu użyj corsa w
Configure
metodzie (bez względu na kolejność użycia!)źródło