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

.NET Core 7 Web API遇CORS拦截:缺少Access-Control-Allow-Origin头

解决.NET Core 7.0中的CORS错误

问题分析

你的代码存在两个关键问题导致CORS错误:

  1. 未注册CORS服务:ConfigureServices中缺少services.AddCors()调用,CORS功能未被启用。
  2. 中间件顺序错误:UseCors的位置不符合.NET Core中间件执行顺序要求,导致CORS响应头无法被正确添加到请求中。

解决方案

步骤1:注册CORS服务

在ConfigureServices方法中添加CORS服务注册,建议定义明确的CORS策略(更易于后续维护):

public void ConfigureServices(IServiceCollection services)
{
    // ... 原有代码保持不变 ...

    // 添加CORS服务并定义允许所有来源的策略
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAllOrigins",
            builder =>
            {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            });
    });

    // ... 原有代码保持不变 ...
}

步骤2:调整中间件顺序

修改Configure方法中的中间件顺序,确保UseCors位于UseRouting之前、UseHttpsRedirection之后,同时在UseAuthentication和UseAuthorization之前:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 自定义中间件(若该中间件不会提前返回响应,可保留在此;若存在短路逻辑,需调整到UseCors之后)
    app.UseMainMiddleware();

    app.UseHttpsRedirection();

    // 应用CORS策略,必须放在UseRouting之前
    app.UseCors("AllowAllOrigins");

    app.UseRouting();

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

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

额外检查点

  • 如果UseMainMiddleware自定义中间件包含直接返回响应的逻辑(比如异常捕获后直接返回),请确保UseCors在它之前执行,否则CORS头无法被添加到响应中。
  • 生产环境不建议使用AllowAnyOrigin,可替换为指定的前端域名,例如:builder.WithOrigins("http://x.x.x.x:1400"),若需要携带Cookie或认证信息,需额外添加AllowCredentials()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:53:10