2

我正在处理的网站遇到问题。从 JavaScript 函数调用 WebMethod:

var ajaxOptions = {
    url: "/layouts/foobar/Foo.aspx/GetBar"
}
$.ajax(ajaxOptions).done(function(result) { 
    loadResult(result, a);
});

Foo.Aspx 中的 GetBar 方法如下所示:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object GetBar()
{
    return FoobarManager.GetItems();
}

该函数返回一个有效的 JSON 对象。Sitecore 在 FoobarManager 中使用。例子:

Context.Database.GetItem("/sitecore/content/foobar");

在开发和测试环境中,事情运行得非常顺利,从来没有出现过任何问题。部署到暂存环境后,我看到 GetBar 函数的响应是我们自定义的 404 页面。我认为这是因为 Sitecore 试图解析路径“/layouts/foobar/Foo.aspx/GetBar”但失败了。

既然是在D和T环境下工作的,那肯定是配置问题。我将 GetBar url 添加到 IgnoreUrlPrefixes 设置中。这导致 ajax 调用中的 500 响应:Sitecore.Context.Database 为空。我认为它与 ItemResolver 有关,但我不明白为什么它在 D 和 T 上有效,但在 A 上无效。

我该怎么做才能正确解析网址?

4

1 回答 1

3

你有两件相互矛盾的事情。如果您将/layouts/foobar/Foo.aspx路径添加到IgnoreUrlPrefixes您必须执行的设置(如您所做的那样),那么 Sitecore 将不会在其中运行其上下文。这意味着,您的代码Context.Database...无效。我建议您按名称获取数据库。您需要已发布的“网络”数据库吗?你需要弄清楚你需要哪一个,但是像这样:

var db = Sitecore.Configuration.Factory.GetDatabase("web"); // assumes you need the web DB
var foobar = db.GetItem("/sitecore/content/foobar");

TL;DR:没有上下文,因此您无法从中获取数据库。

于 2012-09-24T17:22:53.650 回答