2

うーん、これについてはたくさんありますが、JSON オブジェクトを Web サービス オブジェクトに渡すことができないようです。この作業を行うのに最も近いのは、次のように ID がサービス内の文字列変数名と一致するこの例です。

        var jsonData = { "ID": "hello" };
        $.ajax({
            url: "http://blah/blah.svc/GetPersonByID",
            type: "POST",
            dataType: "jsonp",  // from the server
            contentType: "application/json; charset=utf-8", // to the server
            data: jsonData,
            success: function (msg) {
                alert("success " + msg.Name);
            },
            error: function (xhr, status, error) {
                alert(xhr.status + " " + status + " " + error);
            }
        });

WCF サービスの場所

    [OperationContract]
    [Description("Returns a person by ID.")]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
    Person GetPersonByID(string ID);

    public Person GetPersonByID(string ID) {
        Person person = new Person {
            Name = ID,   // "Bob",
            FavoriteColor = "Red",
            UserID = 1 //int.Parse(ID)
        };
        return person;
    }

これは「成功 ID=hello」を返します。

hello だけでなく ID=hello を返すのはなぜですか?

data: JSON.stringify({ "ID": "hello" }) を使用すると、400 bad request で失敗します

Web サービス ID (文字列ではなく) の int のような他のデータ型を試みた場合、失敗した場合。

より複雑なデータ型を試みると、失敗します。

何かご意見は???どうも

4

1 に答える 1

4

デフォルトでは、WCF操作で期待されるボディスタイルは「bare」です。これは、入力を単独で送信する必要があることを意味します(つまり、次のようなものを期待し"hello"ます。この場合、パラメーター名( )を使用してオブジェクトにラップ{"ID":"hello"}します。 。

ラップされた入力を操作に期待させる(属性のBodyStyleプロパティをに設定する(およびデータをJSON.stringifyする)か、$。ajaxに渡されるパラメーターを変更してJSON文字列()を送信することができます。WebInvokeWebMessageBodyStyle.WrappedRequestdata: "\"hello\""

于 2012-05-08T21:24:09.883 に答える