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

IIS服务器上.NET Core API+Angular+SignalR项目CORS错误排查求助

配置错误原因

  • 源匹配规则使用了错误的占位符:你当前CORS策略中SetIsOriginAllowed的判断条件为new Uri(origin).Host == "server name",这里的"server name"是未替换的占位符,实际部署后你的前端源为http://server,对应Host值是server,和配置的匹配值不一致,直接导致CORS策略匹配失败,不会返回跨域响应头,这也是本地调试正常、部署后出错的核心原因——本地调试时你大概率启用了注释里的SetIsOriginAllowed(_ => true)允许所有源,自然不会触发跨域限制。
  • 全局授权过滤器拦截了CORS预检请求:CORS的OPTIONS预检请求不会携带Windows身份凭证,你配置了全局要求身份认证的过滤器,会直接拦截预检请求,导致跨域响应头无法返回。
  • 源配置格式错误:你注释的WithOrigins配置中写了http://server/fareg,但跨域规则的源仅包含协议、域名、端口三部分,路径不属于源的内容,填写路径会导致匹配失效。

修复步骤

1. 修正跨域源匹配规则

两种配置方式二选一即可:

方式A:固定允许的源(更安全,推荐)

直接用WithOrigins明确指定允许的前端地址:

services.AddCors(options =>
{
    options.AddPolicy(name: _MyCors, builder =>
    {
        builder
            .WithOrigins("http://server", "http://localhost:4200")
            .AllowCredentials()
            .AllowAnyHeader()
            .AllowAnyMethod();
    });
});

方式B:动态匹配Host

如果需要动态匹配同Host的所有源,把占位符替换为实际的Host值:

.SetIsOriginAllowed(origin => new Uri(origin).Host == "server")

2. 放行CORS预检OPTIONS请求

在Configure方法中UseCors之后添加如下中间件,优先处理OPTIONS预检请求,避免被全局授权拦截:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseCors(_MyCors);

    // 新增:放行OPTIONS预检请求
    app.Use(async (context, next) =>
    {
        if (context.Request.Method == "OPTIONS")
        {
            context.Response.StatusCode = 200;
            await context.Response.CompleteAsync();
            return;
        }
        await next();
    });

    // 其余原有配置保持不变
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    
    app.UseSignalR(routes =>
    {
        routes.MapHub<Hubs.HubFA>("/signalr");
    });

    app.UseMvc();
}

3. 验证配置生效

部署后清空浏览器缓存再测试,如果仍有报错,可以在服务器上用浏览器直接访问后端API地址,确认服务正常启动、端口没有被防火墙拦截。

内容的提问来源于stack exchange,提问作者Ruben Martinez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:24:02