【问题标题】:WebMethod not accessible in Sitecore在 Sitecore 中无法访问 WebMethod
【发布时间】:2012-09-16 04:18:53
【问题描述】:

我正在处理的网站遇到问题。 从 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 上无效。

如何正确解析网址?

【问题讨论】:

    标签: c# javascript json sitecore webmethod


    【解决方案1】:

    你有两件相互矛盾的事情。如果您将 /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:没有上下文,因此您无法从中获取数据库。

    【讨论】:

    • 是的,我最终做到了,但仍然......它在我的开发和测试环境中工作很奇怪。当我在 ItemResolver 中输入日志时,我发现在 D 和 T 上解析的链接是“/foo.aspx”,而在 A 上解析的链接是“/foo.aspx/GetBar”。我认为这一定是配置或IIS的差异..
    猜你喜欢
    • 2013-04-21
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多