.NET Core 7 Web API遇CORS拦截:缺少Access-Control-Allow-Origin头
解决.NET Core 7.0中的CORS错误
问题分析
你的代码存在两个关键问题导致CORS错误:
- 未注册CORS服务:
ConfigureServices中缺少services.AddCors()调用,CORS功能未被启用。 - 中间件顺序错误:
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
相关产品推荐
相关产品推荐

