我需要你的帮助来解决这个问题。我查遍了互联网,无法弄清楚我做错了什么......CORS......这很痛苦!
在我的
Program.cs
中,我有以下内容:
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>
{
policy.WithOrigins("http://localhost:4200", "https://dev-backoffice.mydomain.com", "https://backoffice.mydomain.com")
.AllowAnyHeader()
.AllowCredentials()
.AllowAnyMethod();
});
});
和
app.UseCors();
app.UseStaticFiles();
但是我仍然收到 CORS 错误:
从源“https://dev-backoffice.mydomain.com”获取“https://dev-api.mydomain.com/v1/authenticate”的访问已被 CORS 策略阻止:对预检请求的响应不会”通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源
有什么想法吗?我认为我所放置的内容或多或少地打开了所有内容,只要它来自我给出的网址之一。
您必须定义如下所示的自定义策略,并将策略应用于 CORS。
第1步:
//定义CORS策略 var CustOrigins = "_custOrigins";
builder.Services.AddCors(options =>
{
options.AddPolicy(name: CustOrigins,
policy =>
{
policy.WithOrigins("http://localhost:4200",
"https://dev-backoffice.mydomain.com",
"https://backoffice.mydomain.com")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
第2步:
// Apply the CORS policy
app.UseCors(CustOrigins);
步骤3:
在 Action 方法的控制器级别应用 Cors
[ApiController]
[Route("api/[controller]")]
[EnableCors("CustOrigins")] // Apply CORS policy to the entire controller
public class TestController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
return Ok(new { Message = "CORS is applied to this controller!" });
}
}