Kentico 13 SearchHelper.Search在.NET Core与.NET MVC返回类型差异问询
Kentico Xperience 13 迁移至.NET Core 搜索结果类型不一致问题解决方案
问题根因
两个版本的搜索API类型解析逻辑存在差异:
- 旧版.NET Framework MVC项目默认会自动扫描注册所有生成的强类型文档类,搜索返回结果时会自动将基础TreeNode实例映射为对应文档类型的强类型对象(如你代码中的
News类) - .NET Core版本默认不会自动注册强类型文档类到系统类型解析器,因此搜索结果默认返回基础
TreeNode类型对象
解决步骤
方案1:全局注册强类型文档类(推荐)
在.NET Core项目的服务注册逻辑(Startup.cs的ConfigureServices方法或Program.cs的服务注册段)中,调用AddDocumentTypes方法注册你存放强类型文档类的程序集:
// 以.NET 5 带Startup的配置为例 public void ConfigureServices(IServiceCollection services) { services.AddKentico() // 传入强类型文档类所在的程序集,示例中直接取News类所在的程序集 .AddDocumentTypes(typeof(News).Assembly); // 其余服务注册逻辑 }
注册完成后重启项目,搜索API会自动完成类型映射,返回对应强类型对象,和MVC版本行为一致。
方案2:手动转换类型
如果不想做全局注册,可以在处理搜索结果时调用Kentico提供的扩展方法手动转换:
// 遍历搜索结果时转换 var newsItems = searchResult.Items .Select(item => ((TreeNode)item.Data).As<News>()) .ToList();
额外检查项
- 确认
News类上的[DocumentType]特性配置正确,News.CLASS_NAME常量和CMS后台定义的新闻文档类型代码名完全匹配 - 确认搜索索引配置包含了新闻文档类型,可尝试重建索引后再测试
调试对比参考
内容的提问来源于stack exchange,提问作者Craig
相关产品推荐
相关产品推荐

