64

コードビハインドファイルを使用してASMXファイルを作成しました。正常に動作していますが、XMLを出力しています。

ただし、JSONを出力するために必要です。ResponseFormat構成が機能していないようです。私のコードビハインドは次のとおりです。

[System.Web.Script.Services.ScriptService]
public class _default : System.Web.Services.WebService {
    [WebMethod]
    [ScriptMethod(UseHttpGet = true,ResponseFormat = ResponseFormat.Json)]
    public string[] UserDetails()
    {
        return new string[] { "abc", "def" };
    }
}
4

6 に答える 6

58

XML にラップせずに純粋な JSON 文字列を受け取るには、JSON 文字列を に直接書き込み、戻り値の型を にHttpResponse変更する必要があります。WebMethodvoid

    [System.Web.Script.Services.ScriptService]
    public class WebServiceClass : System.Web.Services.WebService {
        [WebMethod]
        public void WebMethodName()
        {
            HttpContext.Current.Response.Write("{property: value}");
        }
    }
于 2012-11-22T11:32:46.763 に答える
39

From WebService は、 ResponseFormat が JSON に設定されている場合でも XML を返します

リクエストが GET ではなく POST リクエストであることを確認してください。Scott Guthrie がその理由を説明する投稿をしています。

これは jQuery 用に特別に書かれていますが、こちらも役に立つかもしれません:
Using jQuery to Consume ASP.NET JSON Web Services

于 2008-10-17T10:36:24.997 に答える
17

これはおそらく今では古いニュースですが、魔法は次のようです。

  • [ScriptService] Web サービス クラスの属性
  • [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] メソッド
  • Content-type: リクエストの application/json

これらのピースが配置されると、GET リクエストは成功します。

HTTP POST の場合

  • [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] メソッド

クライアント側 (webmethod が MethodName と呼ばれ、searchString と呼ばれる単一のパラメーターを取ると仮定します):

        $.ajax({
            url: "MyWebService.asmx/MethodName",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify({ searchString: q }),
            success: function (response) {                  
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert(textStatus + ": " + jqXHR.responseText);
            }
        });
于 2012-04-18T16:48:03.907 に答える
9

私が難しい方法(基本的にGoogleで4時間を費やす)を学んだ簡単な落とし穴です。ASPXファイルのPageMethodsを使用して、静的メソッドのJSON([ScriptMethod()]マーカーを使用)を返すことができますが、移動する場合はasmxファイルへの静的メソッド。静的メソッドにすることはできません。

また、呼び出しからJSONを取り戻すには、WebサービスのContent-Type:application / jsonに通知する必要があります(私はjQueryを使用しており、jQueryを使用するときに避けるべき3つの間違いの記事は非常に啓発的でした-同じWebサイトからのものですここで別の回答に記載されています)。

于 2008-10-21T21:19:34.353 に答える
4

代替手段: 汎用 HTTP ハンドラー (.ashx) を使用し、お気に入りの json ライブラリを使用して、JSON を手動でシリアル化および逆シリアル化します。

私は、要求の処理と応答の生成を完全に制御することが、.NET が提供するシンプルな RESTful Web サービスの他の何よりも優れていることを発見しました。

于 2012-09-10T20:47:07.920 に答える
4

Web サービスをクライアント スクリプトから呼び出していますか、それともサーバー側で呼び出していますか?

コンテンツ タイプ ヘッダーをサーバーに送信すると役立つ場合があります。

'アプリケーション/json; 文字セット=utf-8'

クライアント側では、プロトタイプのクライアント側ライブラリを使用します。Ajax 呼び出しを行うときに、これを指定できる contentType パラメーターがあります。jQuery には getJSON メソッドがあると思います。

于 2008-10-17T10:38:54.133 に答える