asp.net - CORS 在 Angular 11 和 Asp.net Core 2.1 中不起作用
问题描述
我在使用 angular 11 和 Asp.net Core 2.1.1 中的 CORS 时遇到了一些困难。Angular 服务器在 4201 端口上运行,Asp.net Core 服务器在 8990 端口上运行。我总是收到这样的错误
从源“http://10.31.80.108:4201”访问“http://10.31.80.108:8990/api/localization/login”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
虽然我在 Startup.cs 文件中启用了 CORS:
app.UseCors(builder => builder.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins(new []{ "http://10.31.80.108", "http://10.31.80.108:4201"})
//.WithOrigins(origins.ToArray())
.AllowCredentials());
我尝试了应该允许所有请求的不同变体,但它在 Angular 中不起作用。任何人都可以提出一个可能的解决方案吗?
这是启动文件的大部分内容:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
...
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddMemoryCache();
// services.AddCors();
services.AddCors(o => o.AddPolicy("AllowAnyOrigin", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
})); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo(Configuration["CultureOptions:DefaultCulture"]);
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(Configuration["CultureOptions:DefaultCulture"]);
var cultureOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(new CultureInfo(Configuration["CultureOptions:DefaultCulture"])),
};
var configCultures = Configuration.GetSection("CultureOptions:SupportedCultures").GetChildren();
configCultures.ForEach(config =>
{
cultureOptions.SupportedCultures.Add(new CultureInfo(config.Value));
cultureOptions.SupportedUICultures.Add(new CultureInfo(config.Value));
});
app.UseRequestLocalization(cultureOptions);
List<string> origins = Configuration.GetSection("Origins:value").Get<List<string>>();
app.UseCors("AllowAnyOrigin");
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
// https://joonasw.net/view/hsts-in-aspnet-core
app.UseHsts();
}
app.UseAuthentication();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
});
}
解决方案
你有错误的语法。尝试这个
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(o => o.AddPolicy("AllowAnyOrigins", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
.....
app.UseRouting();
app.UseCors("AllowAnyOrigins");
//app.UseAuthorization();
}
如果可行,请将 AllowAnyOrigin() 替换为您的
.WithOrigins ("http://10.31.80.108", "http://10.31.80.108:4201");
推荐阅读
- javascript - 使用 Fastify-gql 插件进行身份验证
- autofac - Autofac - 一个接口,多种实现
- reactjs - 如何使用 React 上下文 API?
- ruby - 无法理解为什么将简单数组转换为简单哈希的代码不起作用
- swift - 键盘上方的视图不显示
- image - 在 d3.js 散点图中悬停在点上时显示图像
- python-3.x - 父类公开标准方法,子类提供子方法做工作
- javascript - 在antd的多列表中制作单独的单列行
- html - Zalando 的页面高于 429 - 它是如何制作的?
- php - 在 PHP 中使用 XMLReader 读取子节点