我的站点核心解决方案中有 HttpTaskAsyncHandler,我称之为我有 sutup IngnoreUrlPrefix等。由于某种原因,我无法访问 SC.Context.Database 数据库在ProcessRequestAsync(HttpContext context)方法中为空,看起来我没有t 在 HttpHandler 中访问 Sitecore 上下文。
如何解决?
谢谢。
我的站点核心解决方案中有 HttpTaskAsyncHandler,我称之为我有 sutup IngnoreUrlPrefix等。由于某种原因,我无法访问 SC.Context.Database 数据库在ProcessRequestAsync(HttpContext context)方法中为空,看起来我没有t 在 HttpHandler 中访问 Sitecore 上下文。
如何解决?
谢谢。
您将无法在处理程序中访问 Sitecore 上下文(数据库或项目)。我们已经向 Sitecore 支持部门确认了这一点。
最好的方法是开始在请求管道中实现一个处理器。如何实施
在您的类中继承 HttpRequestProcessor(使用 Sitecore.Pipelines.HttpRequest;)
并在 < httpRequestBegin > 中的 SiteResolver 之后添加该处理器
<processor type="Sitecore.Pipelines.HttpRequest.SiteResolver, Sitecore.Kernel" />
<!-- Custom Module -->
<processor type="SND641.Customization.RobotsModule, SND641" />
如果您选择忽略您的脚本文件(通过使用 IgnoreUrlPrefix),那么 Sitecore 的请求管道将不会处理它,因此不会有 Sitecore 上下文。
我认为您可以通过从 IgnoreUrlPrefix 中删除 url 前缀来解决它,并确保将处理程序的文件扩展名添加到 FilterUrlExtensions 管道处理器的允许扩展参数中:
<processor type="Sitecore.Pipelines.HttpRequest.FilterUrlExtensions, Sitecore.Kernel">
<param desc="Allowed extensions (comma separated)">aspx</param>
</processor>
这样,您可以调用您的脚本,并且仍然让 Sitecore 处理所有管道。
您可以在没有管道的情况下获取上下文。除了 web.config 处理程序定义,您还需要在 customHandler 下添加。它有助于获取站点核心上下文。例如
<customHandlers>
<handler trigger="blogfeed.xml" handler="blogfeed.xml" />
</customHandlers>
如果我没有得到你想要做的事情,我很抱歉。但是通过使用处理程序,我确实遇到了我的代码无法访问 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”无效”
正如我所说,在改变之后,一切都对我有用。
我希望这会有所帮助,并为现有答案增加一些价值。
问候,