.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
相关产品推荐
相关产品推荐

