web-dev-qa-db-ja.com

CORSプロトコルでは許可されていません

C#.net Coreのプロジェクトで既にCORSを有効にしました

startup.cs行を追加しました

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

しかし、別のBlazorプロジェクトでAPIを使用しようとすると、Hostの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を有効にする前に、ブラウザコンソールに別のエラーが表示されます

それを解決するために何を変更できますか?

11
Igor Cova

コードの残りの部分を提供する必要があります...これはBlazorクライアントアプリケーションまたはRazorコンポーネントアプリケーション(正式にはサーバー側Blazorとして知られています)ですか?これはBlazorクライアントアプリケーションだと思いますよね?なぜHttpClientをインスタンス化するのですか?代わりに、DI(おそらくConstructor Injection)を使用して、Blazor自体が提供するHttpClientインスタンスを注入する必要があります。

問題はおそらくサーバー側にありますが、クライアント側に見えますが...次を試してください: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ではなく、サーバー側で有効にする必要があります。 ASP.NET CoreでCORSを有効にする方法の詳細については、 https://docs.Microsoft.com/en-us/aspnet/core/security/cors を参照してください。

ブレイザー:

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


@functions {

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

    }

}  

お役に立てれば...

9
Issac

私は同じ問題を抱えていたので、allowCredentials()を削除して、問題を修正しました。

2
Nico