2012-06-28 6 views
10

私は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エラーが発生します。

この時点で私はまだこの問題の解決策を探していますが、私はこの問題を解決することができました。

+0

なぜ 'contentType'宣言が必要ですか? 'datatType'をJSONと*に設定しています*"データは常にUTF-8文字セットを使用してサーバーに送信されますが、これをサーバー側で適切にデコードする必要があります "*部分が不要なので - [jQuery API] (http://api.jquery.com/jQuery.ajax/) –

+0

なぜ完全なURLを使用していませんか? (セキュリティ上の理由から削除した場合を除く) – gabeio

答えて

3

jQueryのポストとWindows認証環境の両方のは素晴らしい仕事Webメソッド(つまり、 - ユーザがLDAPによって認証されています)。しかし、私は最近、サイトにアクセスするためにユーザーを認証するために、RSA(二要素認証、ピンとトークンコード)を使用するサーバーにWebサイトを移動する必要がありました。私が今見ているのは、すべてのjQueryの投稿が「405エラー」を返すということです。

それはエラーがサーバーの構成と関連していることは明らかですが、できれば、完全に必ずRSAサーバに新しいサイトを作成し、このサイトのRSA認証を無効にするには、閲覧してみてくださいあなたのサイトは、エラーがRSA認証にのみ関連していることを絶対に確信し、新しいサーバーでコード関連のコンポーネント/設定が失われていることを捨てます。

コード関連の設定上の問題を破棄したら、 RSAの設定を確認してください(これは難しいことがあります)。かつて、サーバー間でSSOを実装するために、RSAセキュリティを使用するプロジェクトで作業しました。 (シングルサインオン)では、にRSA ISAPIフィルターがインストールされていたことを覚えています。このフィルターは、Active Directoryサーバーに対する各要求を認証するための認証Cookieの読み取り/設定を担当していました。

各要求は、このフィルタによって管理され、このISAPIフィルタは、パイプラインの一番上にあったので、すべての要求が

を認証するために、最初にRSAのISAPIフィルタによって処理されなければならなかったので、私の提案はdoubleですあなたのAJAX投稿をブロックするものがあるかどうかを検出するには、RSAの設定を確認してください。

私はRSAの設定が黒い魔法のようなものだったことを覚えています。私は、これがあなたの組織のケースではないことを心から願っています。

+0

ありがとうJupaol!あなたは私にいくつかの有用な指示を与えてくれました。私はそれを行って、私が掘り起こすことができるものを見ます。私はこのサーバ上にRSAをセットアップしなかったので、残念なことにその知識が不足しています。しかし、私は飛び込んで、RSAの部分で手を汚さなければならないように思えます。 – Jagd

+0

私はそれが助けてうれしいです。 RSA構成を掘り下げる前に、サーバーでサイトを作成し、Windows認証用のRSA認証を変更するか、匿名ユーザーのみを許可するように、新しいサーバーに展開されたサイトがそのサーバーで実際に動作することを確認してくださいあなたのAJAX呼び出しが機能することを確認してください。そうであれば、問題はRSAの設定(ISAPIフィルタ)に関係します。 – Jupaol

+0

同じサーバー上に新しいWebサイトをセットアップし、RSAなしで動作することを確認しました。 RSAなし、SSLなし、Windows認証のみを使用し、動作します。一歩近づくと思う。 – Jagd

0

トラブルシューティングの目的で、AJAX "POST"をAJAX "GET"に変更してみてください。私は開発環境から本番環境にajax postメソッドを持ったページを移動した後、やや類似した問題を抱えていました。

+0

提案をいただきありがとうございます。私はすでにこれを試してみましたが、それには何の幸運もありませんでした。 – Jagd

0

HTTP 405は、リソース(URL)が間違った方法でアクセスされていることを示すコードエラーではなく、サーバーエラーです。 POSTの代わりにGETを使用してみてください。

+0

これはすでに試みましたが、それは事を変更しませんでした。 – Jagd

1

405 HTTPコードは、「Method Not Allowed」コードです。だから、新しいアーキテクチャにはいくつかの設定が間違っています。これは確かにサーバの設定ミスです。このエラーはいくつかの場所から発生する可能性があり、サーバーへのアクセスがないと、誰かが何が起こっているかを伝えるのはかなり難しいでしょう。しかし、多分私はあなたにいくつかの出発点を与えることができます...

web.configをもう一度確認しましたか?これは、このようなエラーが発生する一般的な場所です。

IISログを確認しましたか?それはまた始めるにはとても良い場所です。

リクエストのcontentTypeを設定せずにPOSTしようとするとどうなりますか?ページがJSONリクエストを受け取るように設定されていない可能性があります。

Fiddlerを試しましたか?外部クライアントからPOST要求を送信してみてください。

更新

さらにいくつかの提案:

あなたはSSLを無効にすることを試みたことがありますか?問題がSSLに関連していないことを確認するために無効にします。

URLの書き換えは行っていますか?もしそうなら、これは確かに関係しているかもしれません。

任意のURLに正常にPOSTできますか?多分、IISはPOSTを完全に無効にしているかもしれません。その場合は、有効にするのに役立つhere is an articleと同様に役立つかもしれないhere is a threadがあります。

web.configにHttpPostを追加しましたか?このようなもの:

<webServices> 
    <protocols> 
     <add name="HttpPost" /> 
    </protocols> 
</webServices> 
+0

これはIISやRSAの設定ミスである可能性がありますが、stackoverflowに投稿することで、同様のシナリオ(RSA + jQuery AJAX投稿)を実行している人が、いくつかの有用な方向にある。 – Jagd

+0

あなたの他の提案について - 1)私はweb.configでこれに影響を与えるだろうと思っているものがよく分かりません。私が最初の質問で述べたように、RSA認証がなくても動作しますが、RSAが動作しているときは機能しません。これは私には分かりませんが、あまり知られていないタグが設定されていない限り、web.configと何か関係があると私には信じられません。 – Jagd

+0

a)IISログをチェックしていないので、それを実行します。 b)ページはjsonと連携するように設定されており、RSAが適切に配置されるまではうまくいきます。 c)はい、私はフィドラーを試みたが、何も来なかった。すべての外観から、私がFiddlerを走っていたときにAJAXの投稿がサーバに送られているように見えませんでした。 – Jagd

0

サーバーにajaxエクステンションがインストールされていない可能性があります。参照をCopyLoacal = trueにマークし、binフォルダをWebサーバーに展開してください。これに基づき

関連する問題