我有两个本地运行的应用程序。一个是https://localhost:44365
的网络服务,另一个是https://localhost:44360
的网络应用程序。 Web应用程序需要访问Web服务。
Web服务设置了一个cors策略,应该允许:
// For running on local pc
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
...
app.UseCors("CorsPolicy");
app.useMvc();
...
}
当我运行这两个应用程序并在浏览器中点击Web应用程序时,我得到了交叉原始错误:
无法加载https://localhost:44365/api/users/current/avatarText:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,'https://localhost:44360'原产地不允许进入。响应的HTTP状态代码为500。
服务中的标题(44365)是:
access-control-allow-credentials: true
access-control-allow-headers: content-type
access-control-allow-origin: https://localhost:44360
奇怪的是,我还在相关方法中显示500服务器错误。虽然当应用程序(44360)调用它时,我能够逐步执行该方法(在44365中)并且该方法中没有500。当呼叫不是交叉来源时,我可以成功呼叫它。
你应该使用AllowAllOrigins
options.AddPolicy("AllowAllOrigins",
builder =>
{
builder.AllowAnyOrigin();
});
在允许来自任何来源的请求之前仔细考虑允许来自任何来源的请求意味着任何网站都可以向您的应用发出跨域请求。
此设置会影响preflight requests和Access-Control-Allow-Origin标头(本主题后面部分将介绍)。