VS2022运行原版EShopOnWeb的BlazorAdmin报CORS错误如何解决?
EShopOnWeb BlazorAdmin CORS问题排查解决步骤
该问题为BlazorAdmin站点(端口44315)跨域调用PublicAPI(端口5099)时,PublicAPI未返回正确的CORS响应头导致,按以下步骤排查即可:
- 核对项目启动顺序
官方示例要求必须先启动PublicAPI项目,完全加载完成后再启动BlazorAdmin项目。如果启动顺序颠倒,BlazorAdmin首次发请求时PublicAPI的CORS中间件还未完成初始化,就会触发跨域拦截。可先关闭所有已启动的项目,按顺序重新启动验证。 - 核对CORS配置与端口匹配
打开PublicAPI项目的appsettings.json,找到CorsSettings下的AllowedOrigins配置项,确认其中包含BlazorAdmin的完整访问地址https://localhost:44315,如果你是用HTTP协议访问BlazorAdmin,还要补加对应的HTTP地址。
同时核对两个项目的实际启动端口是否和报错信息一致:右键对应项目→属性→调试→查看启动配置文件中的applicationUrl字段,确保PublicAPI的端口是5099、BlazorAdmin的端口是44315,端口不匹配会直接触发CORS拦截。 - 验证CORS中间件注册顺序
即使未修改代码,也可以打开PublicAPI的Program.cs确认中间件顺序:CORS中间件必须注册在UseRouting之后、UseAuthorization之前,顺序错误会导致CORS规则不生效,正确的注册顺序参考:app.UseRouting(); app.UseCors("CorsPolicy"); // 必须在路由之后、授权之前 app.UseAuthorization(); app.MapControllers(); - 修复本地自签名证书问题
本地未信任.NET自签名HTTPS证书时,预检请求会直接失败,也会报CORS相关错误。打开VS开发者命令提示符,执行dotnet dev-certs https --trust,按提示信任证书后重启所有项目即可。 - 临时验证方案
如果以上步骤排查后仍有问题,可以临时关闭浏览器跨域安全验证确认问题根因:Windows下关闭所有Chrome窗口后,运行chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security,在新打开的Chrome窗口中访问BlazorAdmin,如果页面可以正常加载商品数据,即可确定问题确实出在PublicAPI的CORS配置层面,再回头核对上述配置项即可。
内容的提问来源于stack exchange,提问作者wang
相关产品推荐
相关产品推荐

