Протокол CORS не позволяет - PullRequest
0 голосов
/ 07 декабря 2018

Я уже включил 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 Ответ

0 голосов
/ 08 декабря 2018

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

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

    }

}  

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

...