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

.NET 7服务器CORS策略未生效,允许任意域名访问如何修复?

.NET 7指定域名CORS策略失效的修复方案

问题描述

在.NET 7中配置了仅允许http://example.com访问的CORS策略,但服务器仍接受任意域名的跨域请求,参考官方文档调整后问题依旧。

现有代码

using Microsoft.EntityFrameworkCore;
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using System.Text;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers();
builder.Services.AddDbContext<IHM46WebDbContext>(options =>
{
    var connectionString = "";
    options.UseNpgsql(connectionString);
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "TITLE", Version = "v1" });
});

builder.Services.AddCors(options =>
{
    options.AddPolicy("CORS",
        builder =>
        {
            builder.WithOrigins("http://example.com")
                       .AllowAnyMethod()
                       .AllowAnyHeader();
        });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseCors("CORS");

app.UseAuthorization();

app.MapControllers();

app.Run();

修复步骤

1. 确认中间件执行顺序

你的代码中app.UseCors("CORS")的位置是正确的(位于UseHttpsRedirection之后、UseAuthorization之前),但如果后续有其他自定义中间件修改了响应头,需确保它们不会覆盖CORS设置。

2. 检查控制器的CORS特性

如果控制器或Action上标注了[EnableCors]但未指定策略名,系统会使用默认CORS策略而非你定义的CORS策略。解决方式:

  • 移除控制器上的[EnableCors],让全局策略生效;
  • 改为[EnableCors("CORS")],显式指定使用自定义策略。

3. 验证域名格式准确性

WithOrigins中的域名必须与请求源完全匹配:

  • 包含完整协议(HTTP/HTTPS),比如前端用https://example.com,则配置不能写http://example.com;
  • 带端口的域名需完整填写,比如http://example.com:3000,不能省略端口;
  • 避免多余的斜杠或路径,比如不要写http://example.com/。

4. 清除浏览器缓存测试

浏览器可能缓存了旧的CORS响应头,导致测试结果不准确。测试时使用隐私窗口或清空浏览器缓存,再发送跨域请求验证。

5. 排查是否存在重复CORS配置

检查代码中是否存在其他CORS策略定义(比如AddDefaultPolicy或其他AddPolicy),这些配置可能会覆盖你当前的CORS策略。确保全局仅启用目标策略。

6. 可选:添加凭证支持(如果需要)

如果你的跨域请求需要携带Cookie、HTTP认证信息,需在策略中添加.AllowCredentials(),同时前端请求需设置withCredentials: true:

builder.Services.AddCors(options =>
{
    options.AddPolicy("CORS",
        builder =>
        {
            builder.WithOrigins("http://example.com")
                   .AllowAnyMethod()
                   .AllowAnyHeader()
                   .AllowCredentials(); // 添加此行
        });
});

验证方法

发送跨域请求后,查看响应头中的Access-Control-Allow-Origin字段:

  • 若返回http://example.com,说明策略生效;
  • 若返回*,则策略未被正确应用,需重新检查上述步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:33:22