为本地主机上的任何端口启用 CORS

LP1*_*P13 14 c# asp.net-core

在 asp.net core 中,我可以使用中间件在此处描述的某些方法上启用 CORS

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

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);
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*kin 32

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

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

origin传递给SetIsOriginAllowed委托的值是完整的原点,看起来像http://localhost:8080. 使用Uri,上面的代码比较了Hostlocalhost,最终允许所有localhost来源。

  • 我还需要将 `.AllowAnyHeader()` 和 `.AllowAnyMethod()` 添加到我的 Web API 上的构建器策略中。 (3认同)
  • @HarrisonPaine 这是[来源](https://github.com/dotnet/aspnetcore/blob/release/5.0/src/Middleware/CORS/src/Infrastruct/CorsPolicyBuilder.cs#L55-L97)来准确显示“WithOrigins” ` 正在为你做。 (3认同)
  • 您还可以使用 `new Uri(origin).IsLoopback` 而不是检查 `new Uri(origin).Host == "localhost"`。 (2认同)
  • @HarrisonPaine你不能组合这两种方法,但你可以在`SetIsOriginAllowed`中做任何你喜欢的事情,它可以`||`与`YourOrigins.Contains(origin, StringComparer.Ordinal)`之类的东西。 (2认同)