【问题标题】:Enable CORS for any port on localhost为本地主机上的任何端口启用 CORS
【发布时间】:2023-04-09 23:04:01
【问题描述】:

在 asp.net 核心中,我可以使用中间件在某些方法上启用 CORS,例如 described here

我想知道是否可以为 localhost 上的任何方案和任何端口启用 CORS(仅用于测试目的)。我试过通配符,它​​不起作用

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        if(_environment.IsDevelopment())
        {
              options.AddDefaultPolicy(
                 builder =>
                 {
                     builder.WithOrigins("http://localhost/*",
                                         "https://localhost/*");
                 });
             });
        }
        else
        {
            options.AddDefaultPolicy(
                 builder =>
                 {
                     builder.WithOrigins("http://example.com",
                                         "http://www.contoso.com");
                  });
             });
        }

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    ASP.NET Core 的 SetIsOriginAllowed 方法让您可以完全控制是否允许源参与 CORS。这是基于您的代码示例的示例:

    if(_environment.IsDevelopment())
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost");
        });
    }
    else
    {
        // ...
    }
    

    传递给SetIsOriginAllowed 委托的origin 值是完整的来源,类似于http://localhost:8080。使用Uri,上面的代码将Hostlocalhost 进行比较,最终允许所有localhost 来源。

    【讨论】:

    • 我还需要将 .AllowAnyHeader().AllowAnyMethod() 添加到我的 Web API 的构建器策略中。
    • 你也可以使用new Uri(origin).IsLoopback而不是检查new Uri(origin).Host == "localhost"
    • 有没有办法将它与.WithOrigins() 结合使用?当我尝试过时,.SetIsOriginAllowed() 会覆盖我事先指定的任何其他来源,并且只允许与条件匹配的来源。
    • @HarrisonPaine 你不能将这两种方法结合起来,但你可以在SetIsOriginAllowed 中做任何你喜欢的事情,可以在|| 中使用YourOrigins.Contains(origin, StringComparer.Ordinal) 之类的东西。
    • @HarrisonPaine 这是source 以准确显示WithOrigins 正在为您做什么。
    【解决方案2】:

    我目前正在使用它进行测试并且它可以工作,如果你去掉你的通配符应该可以工作。

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    
            services.AddMvc();
    
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    builder.WithOrigins("http://localhost");
                });
            });
    
    
    
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
       }
    

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2017-11-24
      • 2019-11-05
      • 2016-04-12
      • 2017-08-22
      • 2012-06-03
      • 2018-06-07
      • 2020-04-30
      • 2018-07-09
      相关资源
      最近更新 更多