1. ホーム
  2. c#

[解決済み] The CORS protocol does not allow specifying wildcard (any) origin and credentials at the same time "エラーの修正方法

2023-04-03 20:10:54

質問

私はすでに C# .net Core のプロジェクトで CORS を有効にしています。

startup.cs という行を追加しました。

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

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

これを解決するために何を変更すればよいですか?

どのように解決するのですか?

残りのコードを提供する必要があります... これは Blazor クライアントアプリケーションですか、それとも Razor コンポーネントアプリケーション(正式名称は Server-Side Blazor)ですか? Blazor クライアントアプリケーションなのでしょうか? なぜ、HttpClient をインスタンス化するのですか?代わりに DI (Perhaps Constructor Injection) を使って、Blazor 自身が提供する HttpClient インスタンスをインジェクションする必要があります。

問題はおそらくサーバーサイドにあるのですが、クライアントとして表面化しています...。 以下を試してみてください。

取得 https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/

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 を有効にする必要があるのは サーバ側 で有効にする必要があります。参照 https://docs.microsoft.com/en-us/aspnet/core/security/cors を参照し、ASP.NET Core で CORS を有効にする方法を確認してください。

Blazorです。

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


@functions {

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

    }

}  

これが役に立つといいのですが...