我在同一项目中有一个SPA和API,当我向该API提出请求时,不断出现以下错误。
AllowedOrigins configured and origin http://localhost:5000 is not allowed
CorsPolicyService did not allow origin: http://localhost:5000
api的路径为:http://localhost:5000
。我确保已在ClientCorsOrigins
表中为客户端指定了来源,并且还在Startup.cs
中添加了策略:
services.AddCors(options =>
{
options.AddPolicy("default", policy =>
{
policy.WithOrigins("http://localhost:5000")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
我已经多次检查了文档和配置,当在ClientCorsOrigins表中指定了来源时,我不知道为什么会出现此问题。我正在使用Google Chrome。任何帮助将不胜感激!
答案 0 :(得分:1)
您需要使用ClientId和Origin将行/记录添加到[dbo]。[ClientCorsOrigin]表中。
CorsPolicyProvider.cs在#62行中有一个检入:
if (await corsPolicyService.IsOriginAllowedAsync(origin))
当它返回 false 时,在第http://localhost:5000行中显示“ CorsPolicyService不允许来源:#69 ”消息。
我假设您正在使用IdentityServer4.EntityFramework。这是位于IdentityServer4.EntityFramework.Services命名空间中的CorsPolicyService.cs中的IsOriginAllowedAsync方法:
/// <summary>
/// Determines whether origin is allowed.
/// </summary>
/// <param name="origin">The origin.</param>
/// <returns></returns>
public Task<bool> IsOriginAllowedAsync(string origin)
{
// doing this here and not in the ctor because: https://github.com/aspnet/CORS/issues/105
var dbContext = _context.HttpContext.RequestServices.GetRequiredService<IConfigurationDbContext>();
var origins = dbContext.Clients.SelectMany(x => x.AllowedCorsOrigins.Select(y => y.Origin)).ToList();
var distinctOrigins = origins.Where(x => x != null).Distinct();
var isAllowed = distinctOrigins.Contains(origin, StringComparer.OrdinalIgnoreCase);
_logger.LogDebug("Origin {origin} is allowed: {originAllowed}", origin, isAllowed);
return Task.FromResult(isAllowed);
}
查看isAllowed,其中填充了AllowedCrossOrigins集合中的数据,该数据的内容存储在[dbo]。[ClientCorsOrigin]表中。
因此,请仔细检查ClientCorsOrigin表中的内容。