0

クライアントを介して複雑なデータを受信する必要がある WCF REST サービスを実行しています。複雑なデータを GET メソッドで渡すことができないことはわかっているので、送信するために POST を使用しています。

私はこのようなメソッド定義を持っています...

[WebInvoke (UriTemplate="/test/item", Method="POST", 
        RequestFormat=WebMessageFormat.Json, 
        ResponseFormat=WebMessageFormat.Json, 
        BodyStyle=WebMessageBodyStyle.Wrapped)]
    [OperationContract]
    string TestMethod(InItem item);

そして、私は.Netコンソールクライアントでこのように消費しようとしています...

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://myIP:port/test/item");
request.Credentials = CredentialCache.DefaultCredentials;
request.Method = "POST";

InItem item = new InItem()
{
    Quantity = 2,
    BougthQuantity = 2,
    Code = "9998",
    Date = DataTime.Now
};

string itemToSend = JsonConvert.SerializeObject(item);
byte[] byteData = Encoding.UTF8.GetBytes(itemToSend);
request.ContentLength = byteData.Length;
request.ContentType = "application/json;";

Stream stream = request.GetRequestStream();
stream.Write(byteData, 0, byteData.Length);
stream.Close();

WebResponse response = request.GetResponse();
stream = response.GetResponseStream();

しかし、サービス メソッドを呼び出すと、TestMethod の 'item' パラメータは常に null になります。

前もって感謝します...

4

1 に答える 1

0

皆さんの回答に感謝します。まず第一に、間違いが何であるかを理解しました...またはもちろん、ステートメントを使用できます

"{\"item\":"+serialized object + "}"

面倒ですが、BodyStyle を Bare に変更できます。

次に、エンティティはプロジェクトを通じて共有されるため、同じライブラリを使用していました。また、エンティティに ContractSerializer を適用しました...

Newtonsoftシリアライザーを使用するjsonSerializerとDataContractJsonSerializerがこの種の形式を使用するため、間違いは「DateTime」パラメーターのシリアル化に関するものでした

Date=2013-01-21T14:29:41.2211548-06:00 (フィドラーに表示)

したがって、文字列の Datetime を変更するだけで問題なく動作します...

于 2013-01-21T22:28:47.277 に答える