Kentico文档查询API始终返回空结果,查询自动添加AND 0=1求助
AND 0=1导致空结果的问题 我之前帮好几个开发者排查过一模一样的问题,这个AND 0=1其实是Kentico的一种"安全过滤"机制——当系统判定你的查询不可能返回有效结果,或者存在权限/配置限制时,就会自动注入这个条件强制返回空集。给你列几个最常见的排查方向:
权限限制是头号嫌疑
Kentico的文档查询会自动继承当前执行用户的权限。如果你的代码是前台匿名用户执行,或者后台用户没有对应文档的读取权限,系统就会直接用0=1过滤所有结果。最快的验证方法是切换到超级管理员账号跑同样的查询,如果能正常返回数据,那就是权限问题。解决办法要么给目标用户/角色分配对应文档的读取权限,要么在查询里临时加上.WithFullPermissions()(注意这个方法要谨慎使用,避免权限泄露)。查询条件本身有问题
如果你指定了不存在的文档类型别名、错误的站点路径,或者矛盾的过滤条件,Kentico会判定这个查询不可能有结果,从而注入0=1。比如你写了.WhereEquals("DocumentType", "NonExistentType"),或者同时用了.WhereTrue("IsDeleted")和.WhereFalse("IsDeleted")。建议把查询生成的SQL打印出来看看:var querySql = DocumentHelper.GetDocuments() .WhereEquals("DocumentName", "TestDoc") .ToString(); // 输出这个字符串,检查WHERE子句里除了0=1之外的条件是否合理查询API使用不当
比如你用了.OnlyPublished()但目标文档都没发布,或者.WhereCurrentCulture()但文档没有对应语言的版本,这些情况都会让系统认为没有符合条件的文档,进而添加0=1。另外,某些旧版本的Kentico在使用.CombineWith()做复杂嵌套查询时,也会出现这个bug,建议检查是否有对应版本的补丁可以升级。文档状态异常
如果目标文档被标记为删除、归档,或者处于未审核状态,而你的查询没有明确包含这些状态的文档,也可能触发这个过滤。可以试试在查询里加上.WithAllDocumentStates()来验证。
内容的提问来源于stack exchange,提问作者rory

