HttpHandler中的Sitecore上下文

时间:2012-12-26 12:57:46

标签: sitecore asp.net-4.5

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

如何解决?

感谢。

4 个答案:

答案 0 :(得分:2)

您无法在处理程序中访问Sitecore Context(数据库或项目)。我们已经通过Sitecore支持确认了我们的任务。

最好的方法是在Request管道中实现Processor。 如何实施

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

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

<processor type="Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel" />
<!-- Custom Module  -->
<processor type="SND641.Customization.RobotsModule, SND641" />

答案 1 :(得分:1)

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

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

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

通过这种方式,您可以调用脚本并仍然使用Sitecore处理所有管道。

答案 2 :(得分:1)

您可以获取没有管道的上下文。与web.config处理程序定义一起,您将需要在customHandler下添加。它有助于获取sitecore上下文。例如

<customHandlers>
    <handler trigger="blogfeed.xml" handler="blogfeed.xml" />
</customHandlers>

答案 3 :(得分: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没有任何内容,代码回来了“Command”Sitecore.Database“无效”

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

我希望这有助于并为现有答案增加一些价值。

的问候,