我正在开发一个 Angular 应用程序,在向我的服务器发出 POST 请求时遇到 CORS 问题,但仅在将其部署到 IIS 上之后才遇到。该应用程序在本地主机上完美运行。详情如下:
环境:
http://wapl8.ad.uclp:9091
http://skw.uat.ad.uclp
问题: 当我尝试从 Angular 应用程序(部署在 IIS 上)向服务器发送 POST 请求时,遇到以下 CORS 错误:
Access to XMLHttpRequest at 'http://wapl8.ad.uclp:9091/api/YPTApi/Save' from origin 'http://skw.uat.ad.uclp' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我尝试过的:
任何人都可以帮助我了解如何配置我的环境以允许 POST 请求而不违反 CORS 规则吗?这是后端服务器配置的问题吗?或者我可以在 Angular 方面做些什么来解决这个问题?
代码:
public static void Configure(IServiceCollection services)
{
const string myAllowSpecificOrigins = "AllowSpecificOrigins";
services.AddCors(options =>
{
options.AddPolicy(name: myAllowSpecificOrigins,
// builder =>
// {
builder =>
{
builder
.WithOrigins(
"https://localhost:44498",
"http://localhost:1285",
"https://localhost:44337",
"http://localhost:44337",
"http://skw.uat.ad.uclp",
"http://skw.ad.uclp"
)
.AllowAnyHeader()
//.AllowAnyMethod()
.WithMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
.AllowCredentials();
不知道你是否配置过,.NET需要设置一个配置来管理CORS。 在您的 StartupConfigureServices 方法中添加以下内容:
services.AddCors(options =>
{
options.AddPolicy(name: "general",
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod().
AllowAnyHeader();
});
options.AddPolicy(name: "restrictive",
builder =>
{
builder.WithOrigins("http://Your frontEnd URL").
WithMethods("GET", "POST", "PUT", "DELETE")
.AllowAnyHeader();
});
});
现在在启动中,在配置方法中添加:
app.UseCors("[general/restritive]; // or whatever name you use...
在此示例中,“常规”CORS 配置允许来自任何主机的任何来源,而“限制性”仅允许来自您设置的主机的请求