.NET Core 2.0控制器内调用同类API方法失效问题咨询
问题原因详解
核心错误:缺少return关键字
你在Select/SearchString为空的分支中,仅执行了GetGames();,没有将该方法的返回值作为当前接口的结果返回。程序执行完这行调用后,会继续向下走到后面的return语句,执行带筛选条件的查询逻辑,自然不会得到你预期的全量数据结果。
你只需要修改两个分支的写法,就能复用GetGames的代码,无需重复写LINQ逻辑:
if (Select == null) { return GetGames(); // 增加return关键字,拿到结果后直接返回,不执行后续筛选 }
其他潜在问题优化建议
- 逻辑运算符错误:当前查询条件中使用的
&是按位与运算符,你需要的是逻辑与运算符&&,修改为where n.USR_ID == User_id.user_id && m.G_Genre == Select,避免出现不可预期的运算结果。 - EF Core 查询优化:你当前返回的是
IEnumerable<Game>,这种写法会让EF Core将全量关联数据加载到内存后再执行筛选,性能较差。建议将返回值改为IQueryable<Game>,或者在返回前调用.ToList()主动执行查询,避免潜在的性能问题。 - 路由规则检查:你同时给POST接口标注了
[HttpPost("{参数}")]和[Route]属性,最终生成的路由会叠加为控制器名/GetGamesPerSelect/{Select},需要确认前端调用的地址匹配规则,避免出现404错误。 - 空参数兼容处理:如果参数是从路由传递,参数为空时路由会直接不匹配,接口返回404,不会进入你写的空值判断分支。如果需要支持参数为空的场景,建议将参数改为可选参数,或者调整为从Query/请求Body传递。
内容的提问来源于stack exchange,提问作者Virgal K
相关产品推荐
相关产品推荐

