Visual Studio运行Angular+.NET5+Electron.NET出现ERR_CONNECTION_REFUSED错误
问题根因
你的错误和IIS没有任何关系,Electron.Net运行时本身内置Kestrel作为后端服务,完全不需要依赖IIS,出现ERR_CONNECTION_REFUSED是以下几个配置问题导致的:
- 前后端端口不匹配:IIS Express运行时后端端口是提前配置好的,Electron模式下Kestrel默认监听随机端口,你的Angular前端硬写了IIS的端口作为API请求地址,自然无法访问
- HTTPS重定向冲突:你在Startup中全局开启了HTTPS重定向,但是Kestrel默认没有配置HTTPS监听端口,HTTP请求跳转后找不到对应端口就会被拒绝
- 路由规则冲突:你注释了带
/api前缀的接口路由规则,部分API请求路径和Angular前端路由重合,导致请求被转发到前端而没有到后端Controller - Angular开发代理失效:IIS模式下你大概率使用了Angular的代理配置转发API请求,Electron运行时不会加载这个代理配置,直接请求就会失败
解决方案
按照以下步骤修改配置即可正常运行:
- 限制HTTPS重定向的生效范围
开发环境下不需要HTTPS,修改Startup.cs的Configure方法,把HTTPS重定向逻辑放到生产环境判断里:
// 把原来的app.UseHttpsRedirection();替换成下面的逻辑 if (!env.IsDevelopment()) { app.UseHttpsRedirection(); app.UseHsts(); }
- 固定Kestrel监听端口
保证Electron运行时后端端口固定,修改Program.cs,在UseElectron后指定监听地址:
webBuilder.UseStartup<Startup>(); webBuilder.UseElectron(args); webBuilder.UseUrls("http://localhost:5000"); // 端口可以自定义,只要不冲突即可
- 恢复API路由前缀配置
放开你注释的API路由规则,把接口路径和前端页面路径区分开:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "api", pattern: "api/{controller}/{action}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action=Index}/{id?}"); });
- 修改前端API请求配置
把Angular中所有API请求的基础地址改为相对路径,不要硬写端口,修改environment.ts配置:
export const environment = { production: false, apiBaseUrl: '/api' // 所有接口请求都用/api作为前缀,自动匹配当前服务的地址和端口 };
所有配置修改完成后,Electron模式下运行就可以正常访问后端接口,最终打包后的应用会把Kestrel、Chromium、前后端代码全部整合,完全不需要依赖任何外部服务,符合你独立桌面应用的开发目标。
内容的提问来源于stack exchange,提问作者Jimmyt1988
相关产品推荐
相关产品推荐

