ASP.NET Core项目发布后新控制器在Electron中返回404无法访问
解决ASP.NET Core发布后Electron调用新控制器404问题
问题描述
ASP.NET Core项目发布后,通过Electron启动后端API并调用时,新添加的控制器返回404 Not Found。但Visual Studio调试时可正常访问该控制器,其他现有控制器也能正常工作。
相关代码
新控制器代码
[HttpGet] [Route("Backup")] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }
Electron启动API代码
let coreProcess = null; function startApi() { const proc = require('child_process').spawn; // run server console.log(process.env.NODE_ENV === 'dev'); console.log(`isDevelopment ${isDevelopment}`); console.warn(`dirname: ${__dirname}`); const apiPath = path.join(isDevelopment ? __dirname + '../../..' : '..', 'Home-Inventory-Application', 'core', 'Home-Inventory-Core.exe'); console.warn(`api path: ${apiPath}`); coreProcess = proc(apiPath); coreProcess.stdout.on('data', (data) => { writeLog(`stdout: ${data}`); if (win == null) { createWindow(); } }); //Kill process when electron exits process.on("exit", function () { writeLog('exit'); coreProcess.kill(); }); function writeLog(msg) { console.log(msg); } }
排查解决建议
- 确认发布包完整性:检查Electron调用的
Home-Inventory-Core.exe所在目录,确认新控制器的编译代码已包含在发布包中。发布ASP.NET Core项目时,确保勾选了所有必要的项目文件,没有遗漏新控制器的.cs文件。 - 检查路由配置:
- 确认Startup/Program.cs中已添加
app.MapControllers()(或对应版本的路由注册代码),确保控制器路由被正确注册。 - 检查新控制器的路由模板是否存在冲突,比如可以尝试添加前缀(如
[Route("api/Backup")]),避免和现有路由规则冲突。
- 确认Startup/Program.cs中已添加
- 排查发布环境差异:对比调试和发布环境的配置文件(如appsettings.Development.json vs appsettings.Production.json),查看是否有影响路由注册的配置项,比如路由约束、环境特定的路由规则。
- 直接验证后端路由:在Electron启动API后,用浏览器直接访问新控制器的接口(例如
http://localhost:端口号/Backup),确认后端是否真的未注册该路由,排除前端请求路径错误的可能。 - 检查控制器类有效性:确保新控制器类继承了
ControllerBase或Controller,且没有被错误标记[NonController]特性,导致ASP.NET Core无法识别为控制器。 - 清理旧发布文件:删除Electron目录下的旧API发布文件,重新发布ASP.NET Core项目到指定路径,避免旧文件覆盖新编译内容。
内容的提问来源于stack exchange,提问作者DRW
相关产品推荐
相关产品推荐

