web-dev-qa-db-fra.com

Le protocole CORS ne permet pas

J'ai déjà activé CORS sur le projet dans C # .net Core

Dans startup.cs J'ai ajouté des lignes

...
services.AddCors();
...
app.UseCors(builder => builder
    .AllowAnyOrigin()
    .AllowAnyMethod()
    .AllowAnyHeader()
    .AllowCredentials());

Mais lorsque j'essaie d'utiliser l'API dans un autre projet Blazor, je vois dans les journaux de mon projet API sur Host this error

Le protocole CORS ne permet pas de spécifier un caractère générique (n'importe quel) origine et informations d'identification en même temps. Configurer la stratégie en répertoriant les origines individuelles si les informations d'identification doivent être prises en charge

Mon code dans Blazor

using (HttpClient http = new HttpClient()) {
  http.DefaultRequestHeaders.Add("Authorization", "Token");
   var response = await http.GetStringAsync("https://example.com?prm=2");
   Console.WriteLine(response);
   dynamicContent = response;
}

Avant d'activer Cors, je vois une autre erreur dans la console du navigateur

Que puis-je changer pour le résoudre?

11
Igor Cova

Vous auriez dû fournir le reste de votre code ... S'agit-il d'une application cliente Blazor ou d'une application Razor Components (officiellement connue sous le nom de Server-Side Blazor)? Je suppose que c'est une application cliente Blazor, non? Pourquoi instanciez-vous un HttpClient? Vous devez utiliser DI (peut-être injection de constructeur) à la place, en injectant une instance HttpClient fournie par Blazor lui-même.

Le problème est probablement côté serveur, bien qu'il apparaisse en tant que client ... Essayez ce qui suit: 1. Obtenez https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/ 2.

 public void ConfigureServices(IServiceCollection services)
    {

        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());
        });
         .....
    }

Et ça:

public void Configure(IApplicationBuilder app, 
                         IHostingEnvironment env)    
  {

      app.UseCors("CorsPolicy");
  }

Remarque, encore une fois: CORS doit être activé côté serveur , pas dans Blazor. Voir https://docs.Microsoft.com/en-us/aspnet/core/security/cors pour plus de détails sur la façon d'activer CORS dans ASP.NET Core.

Blazor:

 @page "/<template>"
 @inject HttpClient Http


@functions {

    protected override async Task OnInitAsync()
    {
        var response= await Http.GetJsonAsync<string>    
                      ("https://example.com?prm=2");

    }

}  

J'espère que cela t'aides...

9
Issac

J'ai eu le même problème et j'ai supprimé allowCredentials() qui a résolu le problème pour moi.

2
Nico