You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular调用带JWT认证的.NET Core API出现CORS跨域错误如何解决?

问题修复方案

1. 调整.NET Core 中间件顺序

你当前遇到问题的核心原因是Configure方法中CORS中间件的执行顺序错误。浏览器发送带认证信息的跨域请求前会先发送无认证信息的OPTIONS预检请求,你把CORS中间件放在授权、身份校验中间件之后,预检请求会被授权逻辑直接拦截返回401,没有机会注入CORS响应头,所以浏览器报跨域错误。
修改Configure方法的中间件顺序,将UseCors移到UseAuthentication、UseAuthorization之前:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//.....
    app.UseRouting();
    // CORS中间件必须放在身份验证、授权中间件之前
    app.UseCors("ApiCorsPolicy");
    app.UseSession();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseHttpsRedirection();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });            
//.....
}

2. 可选补充配置

如果调整顺序后仍有问题,可以在CORS策略配置中显式设置预检请求缓存,减少重复预检请求:

services.AddCors(options => options.AddPolicy("ApiCorsPolicy", builder =>
{
    builder.WithOrigins("http://localhost:4200")
           .AllowAnyMethod()
           .AllowAnyHeader()
           .AllowCredentials()
           .SetPreflightMaxAge(TimeSpan.FromMinutes(10));
}));

3. Angular端校验

确认angular2-jwt的配置中,发送请求时withCredentials属性为true,和服务端的AllowCredentials配置对应。
调整完顺序后重启服务端即可解决加[Authorize]后跨域失败的问题。

内容的提问来源于stack exchange,提问作者Merna Mustafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:03