Как исправить ошибку "Протокол CORS не позволяет одновременно указать источник (любой) подстановочный знак (любой)"

Я уже включил CORS для проекта в С#.net Core

В startup.cs я добавил строки

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

Но когда я пытаюсь использовать API в другом проекте Blazor я вижу в журналах в моем проекте API на хосте эту ошибку

Протокол CORS не позволяет указывать подстановочный (любой) источник и учетные данные одновременно. Настройте политику, указав отдельные источники, если необходимо поддерживать учетные данные

Мой код в 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;
}

Прежде чем включить Cors, я вижу еще одну ошибку в консоли браузера

Что я могу изменить для ее решения?

Ответы

Ответ 1

Вы должны были предоставить остальную часть вашего кода... Это клиентское приложение Blazor или приложение Razor Components (формально известное как Server-Side Blazor)? Я думаю, это клиентское приложение Blazor, верно? Почему вы создаете экземпляр HttpClient? Вместо этого вы должны использовать DI (возможно, Constructor Injection), внедряя экземпляр HttpClient, предоставленный самим Blazor.

Проблема, вероятно, со стороны сервера, хотя она выглядит как клиентская... Попробуйте следующее: 1. Получить 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());
        });
         .....
    }

И это:

public void Configure(IApplicationBuilder app, 
                         IHostingEnvironment env)    
  {

      app.UseCors("CorsPolicy");
  }

Обратите внимание, еще раз: CORS должен быть включен на стороне сервера, а не в Blazor. Подробнее о том, как включить CORS в ASP.NET Core, см. в https://docs.microsoft.com/en-us/aspnet/core/security/cors.

Blazor:

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


@functions {

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

    }

}  

Надеюсь, это поможет...

Ответ 2

У меня была та же проблема, и я удалил allowCredentials(), который исправил проблему для меня.