在Google App Engine灵活环境中启用CORS

时间:2018-11-21 21:35:55

标签: google-app-engine asp.net-web-api asp.net-core cors axios

我面临的问题是无法为使用Google App Engine和灵活环境托管的ASP.NET CORE应用程序提供CORS支持。

使用axios库的每个AJAX请求都会导致以下错误...

  

访问“ https://api.[something].services/request”处的XMLHttpRequest   来自来源“ http://localhost:8080”的信息已被CORS政策阻止:   请求中没有'Access-Control-Allow-Origin'标头   资源。

以下是Web api上CORS的配置:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options => 
    options.AddPolicy("MyPolicy", 
        builder =>
        {
            builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials();
        }));

   // ...

   services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();

        System.Environment
              .SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS",
                          Path.Combine(Directory.GetCurrentDirectory(),
                          Configuration["GAE:Credentials"]));
    }
    else
    {
        app.UseHsts();
    }

    // ...

    app.UseCors("MyPolicy");
    app.UseHttpsRedirection();
    app.UseMvc();
}

1 个答案:

答案 0 :(得分:0)

这种类型的CORS错误通常是在resource1对另一个resource2进行跨域HTTP请求而没有为resource2的处理程序返回包含值http://resource1的Access-Control-Allow-Origin:响应标头时获得的。

请牢记,http header handler配置需要在App Engine中部署的应用程序App.yaml文件中进行适当设置。大多数浏览器使用XMLHttpRequest对象发出跨域请求,并注意插入正确的标头并处理与服务器的CORS交互。

以上所有这些信息均适用于App Engine标准而非App Engine Flex环境。那是因为CORS requests are disallowed by default on App Engine Flex。但是you can allow CORS request by adding this "x-google-endpoints" to your API configuration documentation.