我面临的问题是无法为使用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();
}
答案 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.