我正在运行 Orchard Core 并创建了一个需要查询内容项的自定义
IRule
。 (显然查询数据库非常耗时,因此我们仅在发生某些情况并且需要重建重定向缓存时才执行此操作。)为此,我从服务提供商处获得了 IOrchardHelper
,并使用该帮助程序,我正在执行
var listCi = await orchardHelper.GetContentItemByAliasAsync("redirects-list", false);
但是,这会引发
NullReferenceException
,因为 GetService<ISession>()
返回 null
,但 AliasPartContentHandleHelper.QueryAliasIndex(session, alias)
假设会话非空。
是否有办法进行调整,以便
GetService<ISession>()
返回会话?
您可以使用访问器解析当前租户范围的服务提供商
var session = ShellScope.Current.ServiceProvider.GetRequiredService<ISession>();
并从那里查询您的内容项(您可能无法使用
IOrchardCoreHelper
方法),因此请直接进行 ISession
查询。类似的东西
var content = _session.Query<ContentItem, AliasPartIndex>(x => x.Alias == "youralias");
但是,要小心一点,因为这会返回当前租户的 shell 范围,因此会因租户而异,并且您必须确保重写中间件添加在 orchard 核心中间件之后,以便您处于正确的范围内。