Je ne suis pas sûr de ce qui me manque, mais je n'arrive pas à faire fonctionner ma stratégie CORS avec .NET Core 3.1 et Angular 8 côté client.
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();
});
}
Message d'erreur côté client:
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.
MISE À JOUR:
Bien que je me configure CORS de manière incorrecte (et la réponse acceptée ci - dessous fait en fait aider à cela) la racine de l' émission était sans rapport. Pour un contexte supplémentaire, l'application fonctionnait parfaitement bien lors de l'exécution de l'API et de l'application angulaire à l'aide de la CLI - je ne rencontrais ce problème qu'après les avoir déployées sur un serveur Web.
Le problème «réel» a fini par être lié à la connexion SQL, que j'ai découvert uniquement après avoir ajouté la journalisation des erreurs de fichier plat à l'API et exécuté une trace SQL Server pour constater que l'application n'était pas du tout en mesure de se connecter à SQL.
Je m'attendrais normalement à ce que cela renvoie simplement un 500 et j'aurais réalisé le problème en 10 secondes - mais la mauvaise configuration de CORS signifiait qu'un 500 n'était jamais réellement retourné parce que le middleware CORS avait échoué en premier. C'était extrêmement frustrant pour dire le moins! . Cependant, je veux ajouter qu'ici, au cas où d'autres se retrouveraient dans cette situation, comme si je «chassais le mauvais lapin», si vous voulez. Après avoir corrigé la configuration de CORS, je me suis rendu compte que le problème réel n'avait aucun lien avec CORS.
TL; DR; - Parfois, des erreurs côté serveur .NET «non CORS» peuvent être renvoyées en tant qu'erreurs CORS si les stratégies CORS ne sont pas définies correctement
Références:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
avantapp.UseHttpsRedirection();
Réponses:
d'abord
app.UseRouting();
puisapp.UseCors("foo");
Modifiez votre
Configure
méthode comme suit:Ça a marché pour moi!
la source
ConfigureServices
code OP a résolu mon problème. Merci beaucoup!L'API Web utilise
app.UseHttpsRedirection()
; ce qui cause unCORS
problème si le client demandeur n'est pashttps
basé. Donc, pour l'utiliser avec lehttp
client, nous devons commenter ou supprimer cette ligne.Ce problème n'est pas avec
CORS
, le https est à l'origine de ce problème mais une erreur renvoyée le dit avec CORS.la source
Essayez cet util
https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ En utilisant cela, vous pouvez activer / désactiver les cors dans votre application principale .net
la source
Lorsque vous utilisez localhost as
http://localhost:4200
, essayez de le définir dans votre configuration:Et
Configure
méthode:la source
Lors de l'ajout du service Cors, assurez-vous d'inclure
.SetIsOriginAllowed((host) => true)
après.WithOrigins("http://localhost:4200")
la source