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

Angular 12 + .NET 5搭配Windows认证出现CORS跨域拦截问题如何解决?

问题根因
  • 核心原因是仅启用Windows身份验证的IIS默认会拦截无身份凭证的OPTIONS预检请求:浏览器发起跨域POST请求前会先发送OPTIONS预检请求,这个请求不会携带Windows身份验证的凭证,IIS直接返回401未授权响应,此时.NET的CORS中间件还没机会执行,所以响应头里不会有Access-Control-Allow-Origin字段,触发CORS报错。
  • 次要原因是中间件顺序错误/缺失:你当前的Configure方法里没有添加UseAuthentication、UseAuthorization中间件,且CORS中间件的位置没有放在身份验证中间件之前,也可能导致CORS规则未生效。
  • 配置匹配问题:如果appsettings.json中ClientApps:AdminPanel的配置值和实际前端地址http://localhost:4200不完全一致(比如多了末尾斜杠、端口错误),也会导致CORS规则不匹配。
解决方案
  1. 配置IIS允许OPTIONS请求匿名访问
    在后端项目的web.config文件中添加如下配置,开启匿名身份验证单独对OPTIONS请求放行,其他接口仍然走Windows身份验证:
<configuration>
  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="true" />
        <windowsAuthentication enabled="true" />
      </authentication>
      <authorization>
        <add accessType="Allow" verbs="OPTIONS" users="?" />
        <add accessType="Allow" users="*" />
      </authorization>
    </security>
  </system.webServer>
</configuration>

如果IIS层面锁了匿名身份验证的配置,需要先在IIS管理器的对应站点-身份验证中,把匿名身份验证设置为允许。

  1. 修正.NET中间件顺序
    调整Configure方法的中间件顺序,确保CORS中间件放在路由之后、身份验证中间件之前,同时补充缺失的身份验证/授权中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseMiddleware<ExceptionMiddleware>();
    app.UseStatusCodePagesWithReExecute("/Errors/{0}");

    app.UseRouting();
    // CORS必须放在路由之后,身份验证之前
    app.UseCors(AppCorsPolices.MainCorsPolicy.ToString());
    
    // 补充缺失的身份验证、授权中间件
    app.UseAuthentication();
    app.UseAuthorization();

    app.UseStaticFiles();
    app.UseEndpoints(endpoints => {
        endpoints.MapControllers();
    });
}
  1. 校验允许源配置
    确认appsettings.json中的ClientApps:AdminPanel配置值严格等于http://localhost:4200,不要加末尾的斜杠,大小写也尽量保持一致,WithOrigins是严格匹配规则。

内容的提问来源于stack exchange,提问作者Ahmed Lotfi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:01