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

.Net 6 Web API本地测试CORS失败:已允许所有源仍报错

问题描述

本地运行.NET 6 Web API项目时,React前端请求出现CORS失败错误。已配置允许所有源的CORS策略,但浏览器仍提示CORS头缺失,Fiddler显示服务器未返回完整响应(返回0字节)。

相关代码与报错信息

Program.cs代码

internal class Program
{
    private static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        builder.Host
            .UseServiceProviderFactory(new AutofacServiceProviderFactory());

        //Logger
        builder.Logging
                .ClearProviders()
                .AddJsonConsole();

        // Add builder.services to the container.
        builder.Services
                .AddControllers()
                .AddJsonOptions(options =>
                {
                    options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
                });

        var corsPolicy = "corsPolicy";
        builder.Services.AddCors(options =>
        {
            options.AddPolicy(name: corsPolicy,
                              policy =>
                              {                                  
                                  policy
                                  //.WithOrigins("http://127.0.0.1:5173", "http://localhost:5173")
                                    .AllowAnyOrigin()
                                    .AllowAnyHeader()
                                    .AllowAnyMethod();
                              });
        });
        
        string region = Environment.GetEnvironmentVariable("AWS_REGION") ?? RegionEndpoint.USEast2.SystemName;
        builder.Services
                .AddSingleton<IAmazonDynamoDB>(new AmazonDynamoDBClient(RegionEndpoint.GetBySystemName(region)))
                .AddScoped<IDynamoDBContext, DynamoDBContext>()
                .AddScoped<IBookRepository, BookRepository>();

        builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi);

        builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder => ConfigureAutofacStartup.ConfigureAutofacContainerBuilder(containerBuilder, builder.Configuration, typeof(Program)));

        var app = builder.Build();
        
        app.UseHttpsRedirection();
        app.UseCors(corsPolicy);
        app.UseAuthorization();
        app.MapControllers();

        app.MapGet("/", () => "Welcome to running ASP.NET Core Minimal API on AWS Lambda!");

        app.Run();
    }
}

浏览器控制台报错

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost.fiddler:56036/api/jobs/gridlist. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). Status code: 504.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost.fiddler:56036/api/jobs/gridlist. (Reason: CORS request did not succeed). Status code: (null).
XHROPTIONS
http://localhost.fiddler:56036/api/jobs/gridlist
CORS Missing Allow Origin

Fiddler日志

ReadResponse() failed: The server did not return a complete response for this request. Server returned 0 bytes.      
排查与解决方案

1. 移除Lambda托管配置(本地测试专用)

builder.Services.AddAWSLambdaHosting(LambdaEventSource.RestApi)是为AWS Lambda部署准备的配置,本地运行时添加该配置会干扰请求处理逻辑,导致预检请求无法正常响应。注释掉该行代码后重新启动API。

2. 排查API自身运行故障

Fiddler显示服务器返回0字节、状态码504,说明API在处理预检请求(OPTIONS)时已出现异常,而非单纯CORS配置问题:

  • 检查本地AWS凭证配置:AmazonDynamoDBClient初始化需要本地有合法的AWS凭证(如~/.aws/credentials文件),若未配置,API启动或请求时会抛出异常,导致服务无响应。
  • 直接访问API根路径(如http://localhost:56036/),确认API是否能正常返回内容。若无法返回,优先解决API启动/运行时的错误(如DynamoDB连接问题、Autofac容器配置错误)。

3. 优化CORS配置(可选)

虽然AllowAnyOrigin允许所有源,但部分浏览器对通配符与带凭证的请求存在限制。若React请求包含凭证(如Cookie),需调整配置:

  • 取消注释WithOrigins并指定前端实际地址:
    policy.WithOrigins("http://127.0.0.1:5173", "http://localhost:5173")
          .AllowAnyHeader()
          .AllowAnyMethod()
          .AllowCredentials(); // 仅当请求带凭证时添加
    
  • 确保UseCors中间件顺序正确:必须放在UseHttpsRedirection之后、UseAuthorization和MapControllers之前(当前代码顺序已符合要求)。

4. 禁用HTTPS重定向(本地测试)

若本地API未配置HTTPS证书,app.UseHttpsRedirection()会导致请求重定向异常。本地测试时可注释该行,改用HTTP访问API。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:07:07