【问题标题】:CORS rejecting white-listed address specified in Cors Policy (.WithOrigins)CORS 拒绝 Cors 政策 (.WithOrigins) 中指定的白名单地址
【发布时间】:2020-03-12 19:31:40
【问题描述】:

来源在 Startup.cs 中被列入白名单 (http://localhost:4200/),但请求因 Cors 而被拒绝。

这适用于我的 API 上的 GET 请求以及我尝试通过 SignalR 建立连接时。我能够绕过 Cors 通过 AllowAllOrigins 阻止 API 请求,但这不是 SignalR 的可行解决方案,它需要 .AllowCredentials。

拒绝表明我已将正确的域列入白名单。只是好像没有得到尊重。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
                options.AddPolicy(MyAllowSpecificOrigins,
                    builder =>
                        {
                            builder
                               .WithMethods("GET","POST")
                               .AllowAnyHeader()
                               .AllowCredentials()
                               .WithOrigins("http://localhost:4200/");
                        }));  

            services.AddRazorPages();
            services.AddControllers();
            services.AddSignalR();
            services.AddDbContext<WebApplication2Context>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("WebApplication2Context")));
        }

我知道正在应用该政策。当我将 withOrigins 更改为 allOrigins 时,它在启动时失败。

【问题讨论】:

标签: angular asp.net-core cors signalr asp.net-core-webapi


【解决方案1】:

WithOrigins() 中列出来源时,确保它们 有一个尾随/,否则,原点将永远不会匹配并且您的跨源 请求将失败。


    builder
        .WithMethods("GET","POST")
        .AllowAnyHeader()
        .AllowCredentials()
        .WithOrigins("http://localhost:4200"); // No trailing slash

【讨论】:

    【解决方案2】:

    确保您的配置具有像这样的正确顺序,这意味着您的 services.AddCors 和 app.UseCors 必须在中间件管道中排在第一位

    public void ConfigureServices(IServiceCollection services)
    {
          services.AddCors();
          services.AddMvc();
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        app.UseCors(
            options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
        );
    
        app.UseMvc();
    }
    

    【讨论】:

      【解决方案3】:

      你需要像SetIsOriginAllowed这样允许主机来源:

      public void ConfigureServices(IServiceCollection services)
      {
          services.AddCors(options =>
              options.AddPolicy(MyAllowSpecificOrigins,
                  builder =>
                      {
                          builder
                             .WithMethods("GET","POST")
                             .AllowAnyHeader()
                             .AllowCredentials()
                             .WithOrigins("http://localhost:4200"),
                             .SetIsOriginAllowed((host) => true)
      
                      }));  
      
          services.AddRazorPages();
          services.AddControllers();
          services.AddSignalR();
          services.AddDbContext<WebApplication2Context>(options =>
                  options.UseSqlServer(Configuration.GetConnectionString("WebApplication2Context")));
      }
      

      【讨论】:

        猜你喜欢
        • 2021-04-27
        • 2014-05-03
        • 1970-01-01
        • 2021-02-13
        • 2020-12-23
        • 1970-01-01
        • 2020-01-15
        • 2021-06-24
        • 2019-08-25
        相关资源
        最近更新 更多