You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新安装DNN/2sxc环境下索引器报错:字典中不存在给定键

解决DNN/2sxc索引触发的"The given key was not present in the dictionary."异常

嘿,我之前也碰到过类似的2sxc索引报错,结合你给出的错误堆栈(指向DnnBusinessController.GetModifiedSearchDocuments第89行),这个问题基本是索引过程中2sxc尝试访问一个不存在的字典键导致的,大概率和模块内容配置、索引缓存或者版本兼容有关,给你几个实用的排查解决步骤:

1. 先检查出问题的模块(ID 458)

  • 登录DNN后台,找到标签页ID 50上的那个2sxc模块(ID 458)
  • 进入模块的内容管理界面,逐个检查所有内容项:
    • 有没有内容项缺失必填字段?比如某个关键字段被意外清空或删除了
    • 有没有内容项关联了已经被删除的实体(比如关联的分类、其他内容项)
  • 试着把所有内容项重新保存一遍,确保每个项的字段都完整有效

2. 清理并重建DNN搜索索引

有时候损坏的索引缓存会触发这类奇怪的错误:

  • 进入DNN后台的设置 > 搜索页面
  • 先点击清除索引,等清理完成后再点击重建索引,全程留意是否还会抛出相同的异常

3. 确认2sxc和DNN的版本兼容性

  • 查一下你用的2sxc版本和当前DNN版本是否匹配(比如DNN 7.x对应的2sxc版本有特定要求,跨版本很容易出问题)
  • 如果版本不兼容,赶紧升级/降级2sxc到官方推荐的对应版本

4. 自定义代码的排查(如果有修改过2sxc相关代码)

如果你项目里有自定义的2sxc扩展,或者修改过DnnBusinessController的逻辑:

  • 打开DnnBusinessController.cs跳到第89行,看看代码里访问字典的部分
  • 一定要在访问字典键之前先做存在性检查,比如改成这样:
    if (targetDictionary.ContainsKey(targetKey))
    {
        var value = targetDictionary[targetKey];
        // 后续处理逻辑
    }
    else
    {
        // 可以加个日志记录,或者返回默认值避免崩溃
    }
    
  • 重新编译部署修改后的代码

5. 检查模块权限和数据库数据

  • 确保执行索引的Host账号拥有模块458的完整权限,包括内容的读取权限
  • 可以去数据库里看看ToSIC_SexyContent_Content这类表,有没有和模块458相关的损坏或异常记录

要是以上步骤都没解决,建议先导出模块458的内容,删除模块后重新创建再导入内容,最后再重建索引试试。

内容的提问来源于stack exchange,提问作者Frédéric Laurent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:29:28