HttpContextAccessor.HttpContext 在块和@sections 中为空

HttpContextAccessor.HttpContext is null in blocks and in @sections

我正在从 episerver 11 迁移到 12,在视图中有这个问题:

在@Html.PropertyFor 上的所有块和@section 中总是得到这个异常:

Microsoft.AspNetCore.Server.IIS.Core.IISHttpServer[2]
      Connection ID "17293822592188153887", Request ID "80000020-0005-f000-b63f-84710c7967bb": An unhandled exception was thrown by the application.
      System.NullReferenceException: Object reference not set to an instance of an object.
         at EPiServer.Web.HttpContextExtensions.ContentRenderingContext(HttpContext httpContext)
         at EPiServer.Web.Mvc.Html.Internal.DeferredHtmlContent..ctor(Action`1 action, HttpContext httpContext)
         at EPiServer.Web.Mvc.Html.PropertyRenderer.GetHtmlForDefaultMode[TModel,TValue](String propertyName, String templateName, String elementName, String elementCssClass, Func`2 displayForAction)
         at EPiServer.Web.Mvc.Html.PropertyRenderer.PropertyFor[TModel,TValue](IHtmlHelper`1 html, String viewModelPropertyName, Object additionalViewData, Object editorSettings, Expression`1 expression, Func`2 displayForAction)
         at EPiServer.Web.Mvc.Html.PropertyExtensions.PropertyFor[TModel,TValue](IHtmlHelper`1 html, Expression`1 expression)
         at AspNetCore.Areas_Main_Views_Shared_Layouts__BaseHtmlBlock.ExecuteAsync() in *MY VIEW NAME*

我调试了反编译代码,在ContentRenderingContext中HttpContextAccessor存在,但是里面的HttpContext为null。

当我尝试在块控制器中注入 IHttpContextAccessor 时,它的 HttpContext 为空。

但是 - 如果我尝试在页面控制器和页面视图中获取它 (@Html.PropertyFor) 它工作正常并且 HttpContext 存在。

在Startup.cs中我是这样应用的:

services.AddHttpContextAccessor();

怎么了?我还需要做其他事情吗?

编辑: 如果我这样做,错误就会解决,但这看起来不太好,我不想到处复制粘贴它。

部分:

@section Footer {
    @{
        ServiceLocator.Current.GetInstance<IHttpContextAccessor>().HttpContext = Context;
    }
    
    @Html.PropertyFor(x => x.CurrentPage.FooterBottomContentArea)
}

对于块(在 InvokeComponent 中注入 HttpContextAccessor 之后):

HttpContextAccessor.HttpContext = HttpContext;

我们发现这个问题在较新版本的 episerver 中得到解决,我们从 12.3 更新到 12.6,PropertyFor 现在到处都可以工作。

我反编译了它,我看到在 GetHtmlForDefaultMode 中它在最新版本中使用 WrappedHtmlContent 而根本不使用 HttpContextAccessor。