为localhost上的任何端口启用CORS

时间:2019-08-16 20:21:54

标签: c# asp.net-core

在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);
}

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

我目前正在使用它进行测试,并且可以正常工作,如果您删除通配符,则应该可以使用。

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);
   }