CORS协议不允许

时间:2018-12-07 19:38:16

标签: c# .net-core blazor

我已经在C#.net Core中的项目上启用了CORS

startup.cs中,我添加了行

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

但是当我尝试在另一个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之前,我会在浏览器控制台中看到另一个错误

要解决此问题我可以改变什么?

7 个答案:

答案 0 :(得分:33)

我也遇到了同样的问题,并且在这里找到了解决方法:

Setup Any Origin And Any Credentials

像这样在startup.cs文件中更改CORS设置

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

对我有用。

答案 1 :(得分:27)

有点晚了,但我希望它对某人有帮助。

如果您想同时使用ComplaintsControllerAllowCredentials(),只需使用AllowAnyOrigin()

doc about IsOriginAllowed

SetIsOriginAllowed(Func<string,bool> predicate)

答案 2 :(得分:9)

我遇到了同样的问题,因此我删除了allowCredentials(),从而为我解决了这个问题。

答案 3 :(得分:6)

您应该已经提供了其余的代码... 这是Blazor客户端应用程序还是Razor组件应用程序(正式称为服务器端Blazor)? 我猜这是Blazor客户端应用程序,对吧? 为什么要实例化HttpClient?您应该改用DI(也许是构造函数注入),注入Blazor本身提供的HttpClient实例。

问题可能是服务器端,尽管它是作为客户端出现的... 请尝试以下操作: 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。有关如何在ASP.NET Core中启用CORS的详细信息,请参见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");

    }

}  

希望这对您有帮助...

答案 4 :(得分:4)

您不能同时使用AllowAnyOrigin()AllowCredentials() 因此将您的代码更改为:

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

答案 5 :(得分:0)

步骤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中的“配置”下

答案 6 :(得分:-1)

我遇到了同样的问题,通过从URL末尾删除斜杠 / )解决了该问题,因为我总是从chrome浏览器中复制并粘贴url,它的末尾带有 /

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

但是

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