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

.NET Core 6.0 CORS跨域报错求助:文件上传成功但无允许源头

解决ASP.NET Core 6跨域文件上传问题

你的问题核心是接收请求的用户端项目未配置CORS策略——虽然文件已成功保存,但服务端未返回跨域允许的响应头,导致浏览器拦截了请求结果,抛出CORS错误。以下是具体修复步骤:

步骤1:在用户端Program.cs中添加CORS服务配置

在builder.Services.AddControllersWithViews();代码之前,添加CORS策略,明确允许CMS项目的域名发起跨域请求:

// 配置CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowCMSOrigin", policy =>
    {
        // 指定允许跨域的CMS域名
        policy.WithOrigins("https://localhost:7056")
              // 允许所有请求方法(适配文件上传的POST请求)
              .AllowAnyMethod()
              // 允许所有请求头(适配FormData格式的文件上传)
              .AllowAnyHeader();
              // 如果请求需要携带Cookie/身份令牌,取消注释下面一行
              // .AllowCredentials();
    });
});

builder.Services.AddControllersWithViews();

步骤2:在请求管道中启用CORS中间件

在app.UseRouting();之后、app.UseAuthentication();之前,添加启用CORS的代码,确保中间件顺序正确:

app.UseRouting();

// 启用CORS,使用上面定义的策略
app.UseCors("AllowCMSOrigin");

app.UseAuthentication();
app.UseAuthorization();

修改后的完整用户端Program.cs示例

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
var connectionString = Constants.DefaultConnectionString; 
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

// 新增:配置CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowCMSOrigin", policy =>
    {
        policy.WithOrigins("https://localhost:7056")
              .AllowAnyMethod()
              .AllowAnyHeader();
    });
});

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

// 新增:启用CORS中间件
app.UseCors("AllowCMSOrigin");

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();

app.Run();

额外注意事项

  • 生产环境适配:部署到生产环境时,不要使用AllowAnyOrigin,需替换为CMS项目的实际生产域名(例如https://your-cms-domain.com)。
  • 凭据支持:如果请求需要携带Cookie或身份令牌,需在CORS策略中添加.AllowCredentials(),同时前端Ajax要补充配置xhrFields: { withCredentials: true }。
  • 中间件顺序:CORS中间件必须放在UseRouting之后、UseAuthentication/UseAuthorization之前,否则策略不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:36:19