私はASP.NETのWebメソッドを次のようにjQueryのポストがあります。jQueryのAJAXポストが405エラーを受け取り(HTTP動詞POST許可されていない)
$.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のポストとウェブメソッドの両方は、Windows認証環境(つまり、ユーザーはLDAPによって認証されます)でうまく機能します。しかし、私は最近、サイトにアクセスするためにユーザーを認証するために、RSA(二要素認証、ピンとトークンコード)を使用するサーバーにWebサイトを移動する必要がありました。私が今見ているのは、すべてのjQueryの投稿が「405エラー」を返すということです。
クロスサイトリクエストは、明らかに心に浮かびますが、ここでは何も起こっていません。すべてのjQuery AJAX投稿は、AjaxWebMethods.aspxで宣言されているWebメソッドを使用しています。このページはサイトの独自のドメインにあります。
ご協力いただきありがとうございます。
EDIT:IE8にフィドラーを使用するには、
私に少しより多くの情報を提供します。それが返すエラーコードはまだ405ですが、サーバーのエラーがよりわかりやすいです。サーバーのエラーは、「パス/AjaxWebMethods.aspx/UpdNoteにアクセスするために使用されるHTTP動詞POSTは許可されていません」。
私はajaxリクエストのtypeパラメータをGETに変更しようとしましたが、代わりに404が表示されます(リソースが見つかりません)。
また、これはSSLを介していることを忘れています(ただし、これは違いがあるとは思わないが)。
EDIT:(StackOverflowのの抜け目のないメンバーからと豊富ヘルプ)広範なテストの後
私は405エラーがウェブサイトが使用して、より具体的にしていることをアプリケーションプールに直接関係することを決定しましたアプリケーションプール用に選択された管理パイプラインモード。
v4.0(.NET Framework)と統合(管理されたパイプラインモード)を対象とするアプリケーションプールを使用すると、私のAJAXポストはうまく動作します。しかし、v4.0とクラシック(管理パイプラインモード)を対象とするアプリケーションプールを使用すると、405エラーが発生します。
この時点で私はまだこの問題の解決策を探していますが、私はこの問題を解決することができました。
なぜ 'contentType'宣言が必要ですか? 'datatType'をJSONと*に設定しています*"データは常にUTF-8文字セットを使用してサーバーに送信されますが、これをサーバー側で適切にデコードする必要があります "*部分が不要なので - [jQuery API] (http://api.jquery.com/jQuery.ajax/) –
なぜ完全なURLを使用していませんか? (セキュリティ上の理由から削除した場合を除く) – gabeio