【发布时间】:2018-01-19 13:40:02
【问题描述】:
我写了一些代码来处理CORS 到我的Web Api(.Net Core)。这些代码可以在我的本地和测试服务器(Azure 应用服务)上完美运行,但不能在生产环境(Azure 应用服务)上运行。它给出了错误-
XMLHttpRequest 无法加载 http://myapiproduction.co/token。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://myuidashboard.co' 因此不允许访问。
我在appsettings.Production.json 中提供了正确的允许来源网址。我从 Azure 应用服务(生产环境)的 CORS 部分删除了所有值(*)。
当我们从应用服务的 CORS 部分中删除所有内容时,我们的代码逻辑应该可以工作,因为一次只有一个中间件可以工作,无论是应用服务的 CORS 中间件还是我们的 Web Api 代码逻辑。
Web API (Startup.cs)-
var allowedOriginsArr = Configuration["AppSettings:AllowedOrigins"].Split(','); //Example- "http://myuidashboard.co"
services.AddCors(options =>
{
options.AddPolicy("AllowAllCorsPolicy",
builder => builder.WithOrigins(allowedOriginsArr)
.WithMethods("GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS")
.AllowAnyHeader()
.WithExposedHeaders("X-Auth-Token")
.AllowCredentials());
});
所以,我的问题是 - 我需要做任何其他设置来禁用 Azure 应用服务的 CORS 中间件吗?我想完全通过代码(Api 逻辑)控制CORS。
【问题讨论】:
-
确保您的环境变量设置为访问 appsettings.production.json。
-
如果它在测试 Azure 中有效,但在 prod Azure 中无效?听起来这些资源的配置不同。忽略GUI,看数据。比较两种资源的 ARM 模板。研究差异。他们中的任何一个在 CORS 部分中有任何内容吗?如果 prod 有 CORS 部分,请将其删除并重新部署。
-
您能运行探查器跟踪并向我们展示异常选项卡的结果吗?转到诊断和解决 > 诊断工具 > .NET Profiler Trace 并向我们展示结果。有时 CORS 是由于无效的日期/时间值引起的(我知道这没有意义,但我已经看到了)
标签: azure cors asp.net-core-webapi azure-app-service-envrmnt