【发布时间】:2019-10-21 20:48:16
【问题描述】:
我在我的 ASP.NET MVC API 中启用了 CORS,代码如下:
public static void Configure(IApplicationBuilder app)
{
app.UseCors("CorsName");
}
public static void ConfigureServices(IServiceCollection services, IConfiguration config)
{
// Configuration and adding Cross-origin resource sharing
services.AddCors(options =>
{
options.DefaultPolicyName = "CorsName";
options.AddPolicy("CorsName", builder =>
{
builder
.WithOrigins(config["AppSettings:CorsOrigin"])
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyOrigin()
.Build();
});
});
}
我尝试从 API 获取数据,打开 localhost:6320/api/users 并且它工作正常,我得到了所有数据。现在,当我尝试从 Angular 7 应用程序获取数据时,数据未加载并且出现错误
"从 'http://localhost:6320/api/users' 访问 XMLHttpRequest 来源“http://localhost:4200”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。”
如果我启用了 CORS,为什么在尝试从 Angular 应用获取数据时会出错?
这里是应用设置
"AppSettings": {
"DashboardUrl": "http://127.0.0.1:4200",
"CorsOrigin": "http://localhost:4200"
}
来自 Startup.cs 的启动配置
public Startup(IHostingEnvironment env, IConfiguration configuration)
{
Configuration = configuration;
HostingEnvironment = env;
}
public void Configure(IApplicationBuilder app, IHostingEnvironment hEnv)
{
InitializeIdentityDbAsync(app.ApplicationServices).Wait();
DiagnosticsStartup.Configure(app, hEnv);
CorsStartup.Configure(app);
IdentityStartup.Configure(app, Configuration);
MVCStartup.Configure(app);
}
public void ConfigureServices(IServiceCollection services)
{
CorsStartup.ConfigureServices(services, Configuration);
services.AddAutoMapper();
services.AddSingleton<IConfiguration>(o => Configuration);
services.AddScoped<IAppContext, AppContext>();
services.AddSingleton<IEmailService, EmailService>();
services.AddScoped<AuthService>();
services.AddScoped<UserService>();
EFStartup.ConfigureServices(services, Configuration);
IdentityStartup.ConfigureServices(services, HostingEnvironment, Configuration);
MVCStartup.ConfigureServices(services);
AutoMapperConfig.RegisterMappings(services.BuildServiceProvider());
}
【问题讨论】:
-
您要授权所有来源吗?你打电话给
WithOrigins(config["AppSettings:CorsOrigin"])和AllowAnyOrigin()。还要验证您的config["AppSettings:CorsOrigin"]是否返回了良好的价值。 -
请添加完整的
Startup.Configure实现。