1

我的站点核心解决方案中有 HttpTaskAsyncHandler,我称之为我有 sutup IngnoreUrlPrefix等。由于某种原因,我无法访问 SC.Context.Database 数据库在ProcessRequestAsync(HttpContext context)方法中为空,看起来我没有t 在 HttpHandler 中访问 Sitecore 上下文。

如何解决?

谢谢。

4

4 回答 4

2

您将无法在处理程序中访问 Sitecore 上下文(数据库或项目)。我们已经向 Sitecore 支持部门确认了这一点。

最好的方法是开始在请求管道中实现一个处理器。如何实施

在您的类中继承 HttpRequestProcessor(使用 Sitecore.Pipelines.HttpRequest;)

并在 < httpRequestBegin > 中的 SiteResolver 之后添加该处理器

<processor type="Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel" />
<!-- Custom Module  -->
<processor type="SND641.Customization.RobotsModule, SND641" />
于 2012-12-27T04:19:14.183 回答
1

如果您选择忽略您的脚本文件(通过使用 IgnoreUrlPrefix),那么 Sitecore 的请求管道将不会处理它,因此不会有 Sitecore 上下文。

我认为您可以通过从 IgnoreUrlPrefix 中删除 url 前缀来解决它,并确保将处理程序的文件扩展名添加到 FilterUrlExtensions 管道处理器的允许扩展参数中:

<processor type="Sitecore.Pipelines.HttpRequest.FilterUrlExtensions, Sitecore.Kernel">
  <param desc="Allowed extensions (comma separated)">aspx</param>
</processor>

这样,您可以调用您的脚本,并且仍然让 Sitecore 处理所有管道。

于 2012-12-26T13:06:21.757 回答
1

您可以在没有管道的情况下获取上下文。除了 web.config 处理程序定义,您还需要在 customHandler 下添加。它有助于获取站点核心上下文。例如

<customHandlers>
    <handler trigger="blogfeed.xml" handler="blogfeed.xml" />
</customHandlers>
于 2018-08-23T20:21:06.700 回答
0

如果我没有得到你想要做的事情,我很抱歉。但是通过使用处理程序,我确实遇到了我的代码无法访问 sitecore 对象的问题,即使我更新了 web.config 和

我注意到我的处理程序是这样的:

 public class GetHandler: IHttpHandler
    {
      ...
    }

通过添加System.web.SessionState.IrequiresSessionStatem,如下所示:

  public class GetHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
    {....}

然后一切开始工作,我能够毫无问题地从 sitecore 获取项目:

Public void ProcessRequest(HttpContext context)
{
   Database webdb = Factory.GetDatabase("web");
}

之前我的更改 webdb 没有任何内容,代码返回时显示“命令“Sitecore.Database”无效”

正如我所说,在改变之后,一切都对我有用。

我希望这会有所帮助,并为现有答案增加一些价值。

问候,

于 2014-09-04T16:34:46.323 回答