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

.NET Core 3.1控制器配置CORS无效,跨域请求报错求助

跨域问题排查与修复方案

你的CORS配置存在几个关键问题,以下是具体修复步骤:

1. 正确定义CORS策略

在ConfigureServices中明确配置允许的源、请求头和方法,替代当前空的services.AddCors():

// 先定义策略名称常量
private readonly string _corsPolicy = "AllowLocalVueApp";

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy(_corsPolicy, policy =>
        {
            // 开发环境指定Vue应用的源,生产环境替换为正式域名
            policy.WithOrigins("http://localhost:8080")
                  .AllowAnyHeader()  // 必须添加,否则请求带自定义头/Content-Type会被拦截
                  .AllowAnyMethod();
            // 如果你的请求需要携带Cookie,取消下面注释,注意不能和AllowAnyOrigin同时使用
            // .AllowCredentials();
        });
    });

    // 以下保持原有代码不变
    services.AddMvc(option => option.EnableEndpointRouting = false)
        .AddNewtonsoftJson();
    
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    // 其他服务配置...
}

2. 调整中间件顺序并应用策略

在Configure方法中,确保UseCors在UseStaticFiles之后、UseMvc之前,并且指定策略名称:

public void Configure(IApplicationBuilder app, IHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
        {
            HotModuleReplacement = true,
        });
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    // 应用定义好的CORS策略,位置必须在UseMvc之前
    app.UseCors(_corsPolicy);

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");

        routes.MapSpaFallbackRoute(
            name: "spa-fallback",
            defaults: new { controller = "Home", action = "Index" });
    });
}

额外排查点

  • 如果请求需要携带Cookie:
    • 后端必须用WithOrigins指定具体源(不能用AllowAnyOrigin),同时开启.AllowCredentials()
    • 前端请求要设置withCredentials: true(比如Axios中配置axios.defaults.withCredentials = true)
  • 检查API控制器是否添加了[EnableCors]特性,如果有,需要指定和全局一致的策略名称
  • 确认.NET Core API确实运行在https://localhost:44347,没有端口冲突导致地址变化
  • 清除浏览器缓存后重新测试,避免旧的CORS规则缓存影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:05:12