Angular访问.Net5接口HTTP报CORS错误HTTPS正常的原因是什么
问题根因
核心是ASP.NET Core 中间件执行顺序错误,你现有配置里UseHttpsRedirection(HTTPS重定向)中间件的位置在CORS中间件之前:
- 当你用HTTP协议访问
http://localhost:5000接口时,请求首先触发HTTPS重定向逻辑,直接返回307/308重定向响应到HTTPS端口,此时CORS中间件还未执行,重定向响应没有携带CORS相关头,浏览器检测到跨域请求响应缺少Access-Control-Allow-Origin头,直接抛出跨域错误,不会跟进重定向。 - 当你直接用HTTPS地址请求时,不会触发重定向逻辑,请求正常走到CORS中间件并添加响应头,所以访问正常。
解决方案
根据你的开发需求可以二选一:
方案1:开发环境关闭HTTPS重定向(推荐)
本地开发不需要强制HTTPS的话,直接注释掉Startup.cs中Configure方法里的app.UseHttpsRedirection();代码即可,生产环境再打开该配置不影响上线使用。
方案2:调整CORS中间件顺序
如果需要保留HTTPS重定向逻辑,将CORS配置移到HTTPS重定向之前,确保重定向响应也能携带CORS头:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "API v1")); } // CORS配置移到HTTPS重定向之前 app.UseCors(x => x.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
注意:你当前的CORS配置为允许所有来源,生产环境请替换为指定的前端域名,避免安全风险。
内容的提问来源于stack exchange,提问作者Jyothish Bhaskaran
相关产品推荐
相关产品推荐

