我有两个在本地运行的应用程序。一个是位于https://localhost:44365
的Web服务,另一个是位于https://localhost:44360
的Web应用程序。 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。当呼叫不是跨源通话时,我可以成功呼叫它。
答案 0 :(得分:1)
您应该使用AllowAllOrigins
options.AddPolicy("AllowAllOrigins",
builder =>
{
builder.AllowAnyOrigin();
});
在允许任何来源的请求之前,请仔细考虑。允许来自任何来源的请求意味着任何网站都可以向您的应用发出跨来源请求。
此设置会影响preflight requests和 Access-Control-Allow-Origin标头(本主题后面介绍)。