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

.NET 5 Web API子域名CORS配置失败,求有效解决方案

.NET 5 Web API 子域名CORS配置解决方案(支持AllowCredentials)

问题根源分析

你的配置失效主要有两个核心原因:

  1. 源URL格式错误:配置中WithOrigins的URL带有末尾斜杠(如https://dev-XX.myapp.nl/),但浏览器发送的Origin请求头不会包含末尾斜杠,导致匹配失败。
  2. 通配符匹配限制:SetIsOriginAllowedToAllowWildcardSubdomains对通配符的格式要求严格,且和具体域名混用可能引发匹配逻辑冲突,不如自定义验证逻辑可靠。

正确配置代码

1. 配置CORS服务(ConfigureServices)

替换原ConfigureCrossOrigin方法为以下实现,通过自定义逻辑验证子域名,同时保留AllowCredentials:

private void ConfigureCrossOrigin(IServiceCollection services)
{
    services.AddCors(options =>
        options.AddDefaultPolicy(builder =>
            builder
                .AllowCredentials()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .SetIsOriginAllowed(origin => 
                {
                    if (string.IsNullOrEmpty(origin)) return false;
                    
                    Uri originUri;
                    if (!Uri.TryCreate(origin, UriKind.Absolute, out originUri))
                        return false;
                    
                    // 允许所有myapp.nl的子域名及主域名
                    return originUri.Host.EndsWith(".myapp.nl") || originUri.Host.Equals("myapp.nl", StringComparison.OrdinalIgnoreCase);
                })));
}

2. 调整中间件顺序(ConfigureApplication)

确保UseCors的调用顺序正确:必须在UseRouting之后、UseAuthorization之前,否则CORS中间件无法正确拦截请求:

protected override void ConfigureApplication(IApplicationBuilder app, IWebHostEnvironment env, IHostApplicationLifetime appLifetime)
{
    base.ConfigureApplication(app, env, appLifetime);
    
    app.UseRouting();
    app.UseCors(); // 关键:放在UseRouting之后,UseAuthorization之前
    app.UseAuthorization();

    // 其他中间件逻辑...
}

关键注意事项

  • AllowCredentials限制:当启用AllowCredentials时,不能使用AllowAnyOrigin(),必须通过SetIsOriginAllowed明确指定允许的源,否则浏览器会因安全策略拒绝请求。
  • 域名验证严谨性:自定义验证逻辑中加入Uri.TryCreate可以避免非法Origin值导致的异常,同时通过StringComparison.OrdinalIgnoreCase确保大小写不敏感匹配。
  • 避免末尾斜杠:所有配置的源URL都不要带末尾斜杠,保证和浏览器发送的Origin头格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 18:50:30