作業中の 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 を正しく解決するにはどうすればよいですか?