2

作業中の Web サイトで問題が発生しました。WebMethod は JavaScript 関数から呼び出されます。

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 が null でした。ItemResolver と関係があると考えましたが、なぜ D と T では機能するのに A では機能しないのか理解できません。

URL を正しく解決するにはどうすればよいですか?

4

1 に答える 1

3

相反することが2つあります。/layouts/foobar/Foo.aspx(行ったように)実行しなければならない設定へのパスを追加するIgnoreUrlPrefixesと、Sitecoreはそのコンテキストでそのコンテキストを実行しません。つまり、コードContext.Database...が無効です。DBを名前で取得することをお勧めします。公開された「Web」DBが必要ですか?どれが必要かを理解する必要がありますが、次のようなものです。

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

TL; DR:コンテキストがないため、そこからDBを取得できません。

于 2012-09-24T17:22:53.650 に答える