ASP.NET webmethod への次の jQuery 投稿があります。
$.ajax({
type: "POST",
url: "AjaxWebMethods.aspx/UpdNote",
contentType: "application/json; charset=utf-8",
data: "{'ID' : '" + id + "', 'note' : '" + note + "' }",
dataType: "json",
success: UpdNote_Success,
error: AjaxError
});
そして、Web メソッドが宣言されます。
[System.Web.Services.WebMethod(enableSession: true)]
public static int UpdNote(int ID, string note) {
// business logic that eventually returns a number, but simplifying
// ... for the sake of brevity
int retNum = 99;
return retNum;
}
jQuery ポストと Web メソッドはどちらも、Windows 認証環境でうまく機能します (つまり、ユーザーは LDAP によって認証されます)。しかし、最近、サイトにアクセスするために、ユーザーの認証に RSA (2 要素認証、PIN およびトークン コード) を使用するサーバーに Web サイトを移動する必要がありました。そして、私が今見ているのは、すべての jQuery 投稿が「405 エラー」を返していることです。
明らかにクロスサイト リクエストが頭に浮かびますが、ここではそのどれも行われていません。すべての jQuery AJAX 投稿は、AjaxWebMethods.aspx で宣言されている Web メソッドを使用しています。このページはサイト独自のドメインにあります。
ヘルプや提案をお寄せいただきありがとうございます。
編集:
IE8 で Fiddler を使用すると、もう少し情報が得られます。返されるエラー コードは 405 のままですが、サーバー エラーの方がわかりやすいです。サーバー エラーは、「パス '/AjaxWebMethods.aspx/UpdNote' へのアクセスに使用される HTTP 動詞 POST は許可されていません」です。
ajax リクエストの type パラメータを GET に変更しようとしましたが、代わりに 404 が返されました (リソースが見つかりません)。
また、これが SSL 経由であることを忘れていました (ただし、これが違いを生むとは思いません)。
編集:
広範なテスト (および、stackoverflow の賢明なメンバーからの広範な支援) の後、405 エラーは Web サイトが使用しているアプリケーション プールに直接関係しており、より具体的には、アプリケーション プールに選択されているマネージド パイプライン モードに関係していると判断しました。
v4.0 (.NET Framework) と統合 (マネージド パイプライン モード) を対象とするアプリケーション プールを使用すると、AJAX の投稿は正常に機能します。しかし、v4.0 およびクラシック (マネージド パイプライン モード) を対象とするアプリケーション プールを使用すると、405 エラーが発生します。
したがって、この時点で、私はまだこの問題の解決策を探していますが、問題を解決することはできました。