web-dev-qa-db-ja.com

javascriptからwebmethodを呼び出す際のASP.NET500内部サーバーエラー

AJAXを使用して、webmethod機能を呼び出そうとしていますが、適切な結果を得ることができません。問題をグーグルで検索し、多くの解決策を見つけましたが、うまくいきませんでした。私が間違っていることを教えてください。助けていただければ幸いです。

乾杯

コードスニペット

 function checkUserNameExists() {

//initialization
var pagePath = window.location.pathname + "/getUsername";
var value = document.getElementById('control_userName').value;
var dataString = "{ 'value':'" + value + "' }";
$.ajax({
    type: "GET",
    url: pagePath,
    data: dataString,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    error:
            function (XMLHttpRequest, textStatus, errorThrown) {

            },
    success:
            function (result) {
                var flag = true;
                if (result != null) {
                    flag = result.d;
                    if (flag == "True") {
                        alert('okay fine you are good');
                    }
                    else {
                        alert('try again');
                    }
                }
            }
});
 }

コードファイルの背後にあるメソッド

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public string getUsername(string value)
    {
        return "True";
    }

[〜#〜]例外[〜#〜]

 ExceptionType: "System.InvalidOperationException"
  Message: "An attempt was made to call the method 'getUsername' using a        POST request, which is not allowed."
7
M A.

まず、WebメソッドがWebサービスクラスではなくページクラスにある場合は、静的である必要があります。

次に、転送されるデータは実際には文字列ではなくオブジェクトであるため、次のように変更します。

var dataString = { 'value':  value  };

3番目に、「type」は古いバージョンのjquery用です。ajax呼び出しを次のように変更する必要があります。

method: "GET",
url: pagePath,
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",...

または、サーバー側の関数を変更して、ポストコールを取得します。

UseHttpGet = true
7
ShaharB

おそらく、以下のようにメソッド宣言に静的を追加する必要があります

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string getUsername(string value)
{
   return "True";
}

そうでない場合は、ブラウザ->ネットワークをF12してから、エラーメッセージをクリックして簡単に確認できます。

報告された問題、getリクエストの問題については、投稿してみてください

4

答えはここにあります: リンク

問題は、エラーの原因となった[ScriptMethod(UseHttpGet = true)]を使用していた注釈にあります。値をtrueからfalseに変更するだけです。

2
M A.

私の場合、問題は「データ」フィールド(GETとPOSTの両方)でした。テストとして、AJAX呼び出しから「データ」を削除し、Webメソッドパラメーターも削除します。機能する場合は、「データ」フィールドの形式に問題があります。

$.ajax({
   type: "GET",
   url: pagePath,
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   ...

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public string getUsername()
{
    return "True";
}

いくつかの例:

data: JSON.stringify({ "parameter": variable })     WORKS
data: JSON.stringify({ parameter: variable })       WORKS
data: '{"parameter": "' + variable + '"}'           WORKS
data: '{parameter: ' + variable + '}'               don't works 
data: JSON.stringify({ 'parameter': 'value' })      WORKS
data: '{"parameter":"value"}'                       WORKS
data: "{'parameter':'value'}"                       WORKS
data: '{parameter:value}'                           don't works
data: {parameter:value}                             don't works
data: {"parameter":"value"}                         don't works
data: {'parameter':'value'}                         don't works
0
Milko

これはこの質問に固有のものではありませんが、問題の原因をよりよく理解するためにいくつかのことを確認できます。

  • リクエストヘッダーの[一般]セクションで、ステータスコードとリクエストのタイプを確認してください。
  • Jsonエラーがある場合は、応答ヘッダーを確認してください。
  • Responseをチェックして、メッセージ、スタックトレース、および例外タイプを取得します。
  • HeadersRequest Payloadセクションで、渡されたパラメーターを確認してください。

詳細については、 この投稿 を確認してください。

0
CodeZila