我的sitecore解决方案中有HttpTaskAsyncHandler,我称之为sutup IngnoreUrlPrefix 等。 由于某种原因,我无法访问SC.Context.Database数据库在 ProcessRequestAsync(HttpContext context)方法中为空, 看起来我没有访问HttpHandler中的Sitecore上下文。
如何解决?
感谢。
答案 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“无效”
之后,正如我所说,一切都对我有用。我希望这有助于并为现有答案增加一些价值。
的问候,