J'ai un projet d'API Web .net Core 3.0 où j'ai activé le CORS comme indiqué:
ConfigureService
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddDbContext<LabSoftwareContext>(options => options.UseSqlServer(Configuration.GetConnectionString("LabDatabase")));
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Lab API",
Description = "Lab Software APIs"
});
});
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("AllowOrigin");
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
});
}
Et dans Configure method
app.UseCors ();
Et chaque fois que j'appelle ce point final en utilisant httpclient depuis l'application angulaire, j'obtiens une erreur CORS.
Et je peux voir les en-têtes comme dans:
Je pensais que l'ajout du CORS dans mon démarrage aurait dû résoudre ce problème.
MISE À JOUR:
Ajout du code de service de configuration et de configuration:
services.AddCors(options =>
{
options.AddPolicy("AllowOrigin", builder => builder.AllowAnyOrigin());
});
3 Réponses :
écrivez-les à la fin de la méthode Configure
app.UseCors(x=>x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); app.UseAuthentication();app.UseMvc();
changez également https en http
Pas de chance, toujours cette erreur: L'accès à XMLHttpRequest à 'https: // localhost: 44378 / api / UserMaster / 1' à partir de l'origine 'http: // localhost: 4200' a été bloqué par la stratégie CORS: réponse à La demande de contrôle en amont ne passe pas le contrôle d'accès: aucun en-tête "Access-Control-Allow-Origin" n'est présent sur la ressource demandée.
N'utilisez pas https, utilisez http
C'est une suggestion vraiment dangereuse - et même si cela ne vous convainc pas, une fois que vous publiez votre application, vous constaterez que votre site est signalé comme non sécurisé par Chrome et Firefox.
[EnableCors("your_policy")]
public class BaseController : apiController
One thing that worked for me was to that despite putting on the Configure method was that i needed to specify the CORS in the controllers.
Malheureusement, cela n'a pas aidé: dès que j'ajoute que j'obtiens cette erreur:
System.InvalidOperationException: Endpoint LabSoftware.Controllers.UserMasterController.GetUserMaster (LabSoftware) contient des métadonnées CORS, mais aucun middleware n'a été trouvé prenant en charge CORS. Configurez le démarrage de votre application en ajoutant app.UseCors () à l'intérieur de l'appel à Configure (..) dans le code de démarrage de l'application.
utilisez-vous app.UserCors () et définissez-vous un nom pour la stratégie? Sinon, vous avez la politique par défaut, utilisez [EnableCors] sans aucun argument
Je pense que la cause première de ceci est l'ordre de votre middleware dans Configure () - si l'ordre est incorrect, cela peut provoquer des pannes Cors inattendues.
par exemple Je pense que UseCors () devra peut-être être placé après UseHttpsRedirection()
Il y a un tableau (complexe!) Expliquant la commande du middleware ici: https: / /docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1#built-in-middleware
Votre code modifié selon l'exemple de la même page:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Lab Software API");
});
}
pouvez-vous afficher votre code de méthode Configure () dans Startup.cs?
@Bob a mis à jour la question: Utilisation de .net Core 3.0