Протокол CORS не позволяет

Я уже включил CORS для проекта в C# .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. См. https://docs.microsoft.com/en-us/aspnet/core/security/cors для получения подробной информации о том, как включить CORS в 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");

    }

}  

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

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

Немного поздно, но я надеюсь, что это может быть кому-то полезно.

Если ты хочешь AllowCredentials() а также AllowAnyOrigin() вместе просто используйте SetIsOriginAllowed(Func<string,bool> predicate)

документ об IsOriginAllowed

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

                options.AddPolicy("signalr",
                    builder => builder
                    .AllowAnyMethod()
                    .AllowAnyHeader()

                    .AllowCredentials()
                    .SetIsOriginAllowed(hostName => true));
            });

Я также столкнулся с той же проблемой, и я нашел здесь решение:

Настройка любого происхождения и любых учетных данных

Измените настройку CORS в файле startup.cs следующим образом

public void ConfigureServices(IServiceCollection services)
{
    // ...
    services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder => 
            builder.SetIsOriginAllowed(_ => true)
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
    });
}

Меня устраивает.

Шаг 1 Установите пакет nuGet:
Microsoft.AspNetCore.Cors

Шаг 2 добавить

services.AddCors();

в startup.cs в разделе ConfigureServices

Шаг 3 добавить

    app.UseCors(x => x
                .AllowAnyMethod()
                .AllowAnyHeader()
                .SetIsOriginAllowed(origin => true) // allow any origin
                .AllowCredentials());

в startup.cs в разделе "Настроить"

Вы не можете использовать оба AllowAnyOrigin() а также AllowCredentials() в то же время измените свой код на:

...
services.AddCors();
...
app.UseCors(builder => builder
    .WithOrigins("https://example.com")
    .AllowAnyMethod()
    .AllowAnyHeader()
    .AllowCredentials());

У меня была такая же проблема, проблема была решена путем удаления косой черты(/) в конце URL-адреса, потому что я всегда копирую и вставляю URL-адреса из браузера Chrome, и в конце у него есть /:

  .WithOrigins("https://localhost:60576/")  // not working 

но

  .WithOrigins("https://localhost:60576")  // working  !!!

    
Другие вопросы по тегам