如何修复 2sxc 中的"块上下文"错误?



我正在使用2sxc 13.12.1 LTS运行DNN v9.11.0,并遇到以下错误:

需要但未知的块上下文。它没有附加

这个错误来自我编写的一个自定义应用程序,该应用程序有一个下拉列表,其值来自一个名为CountryQuery的查询。

发生错误的特定页面是一个有6个下拉列表的表单。我推测是某些特定的下拉列表组合导致了这个问题。不幸的是,在尝试重现错误后,我一无所获。我找不到会导致错误的下拉值组合。我只是在网站访问者使用了几天后才在日志中找到它。所以我被难住了。

我想解决这个问题,但我不知道从哪里开始。我在下面附上错误:

AbsoluteURL:/api/2sxc/app/auto/query/CountryQuery默认数据提供程序:DotNetNuke.Data.SqlDataProvider,DotNetNuke例外GUID:97146555-e1e2-49de-8445-c10e686077c1程序集版本:门户ID:-1用户ID:-1选项卡ID:-1RawUrl:推荐人:用户代理:异常哈希:BrTk2LCX6s4U2MnLCNGNgkIuE9M=消息:需要阻止上下文,但未知。它没有附加。

StackTrace:位于C:\Projects\2sxc\V13\2sxc\Src\Sxc\ToSic.Sxc\Context\ContextResolver.BlockRequired()中:行35在ToSic.Sxc.WebApi.App.AppQueryControllerReal.QueryPost(字符串名称,QueryParameters更多,可为空的1 appId, String stream, Boolean includeGuid) in C:Projects2sxcV132sxcSrcSxcToSic.Sxc.WebApiAppAppQueryControllerReal.cs:line 54 at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2个参数,CancellationToken取消令牌)---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Tracing.TraceWriterExtensions.d__171.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__171.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Filters.ActionFilterAttribute.d_6.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Web.Http.Filters.ActionFilterAttribute.d_6.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Filters.ActionFilterAttribute.d_5.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Controllers.ActionFilterResult.d_5.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Filters.AuthenticationFilterAttribute.d_3.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Filters.AuthenticationFilterAttribute.d_3.MoveNext()---从引发异常的前一位置开始的堆栈结尾跟踪---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Sthrow()位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)位于System.Web.Http.Controllers.ExceptionFilterResult.d_6.MoveNext()InnerMessage:

InnerStackTrace:

来源:ToSic.Sxc

文件名:

文件行号:0

文件列编号:0

方法:

服务器名称:DNN4LESS11

我的应用程序似乎对我测试过的所有值都能正常工作。显然,该网站的访问者正在尝试某种组合,这会造成麻烦。我没有收到任何关于网站工作不正常的报告。

内容块是;记录";上面写着";这里我展示了模板某某,它将使用数据某某;。查看文档:https://docs.2sxc.org/basics/cms/content-blocks/index.html

DNN将向页面添加一个模块,并在模块设置中存储应用程序id和内容块guid,以查找要显示的内容。文档:https://docs.2sxc.org/basics/cms/content-blocks/content-blocks-in-dnn.html

还有一件事:当你添加一个应用程序时,它实际上还没有存储应用程序id/内容块,因为一旦它这样做了,它就是";最后的";因此用户不能再切换到另一个应用程序。所以它不会得到";最终确定的";直到用户开始编辑新添加的应用程序上的数据。

如果2sxc找不到内容块,我想其中一个是关闭的:

  1. DNN中指向应用程序/内容块的数据丢失
  2. DNN中指向应用程序/内容块的数据存在缺陷
  3. 由于未知原因,内容块被删除(这非常罕见,因为它们从未被删除)

您可以看到Insights中使用的确切值。

但我的直觉是这是DNN搜索。我的猜测是,你有一些模块添加到页面上,没有";最后确定";DNN搜索试图对其进行索引。这很可能是因为当你在日志中看到Portal=-1时,它通常是由搜索触发的。

最新更新