2
[WebInvoke(Method="POST",UriTemplate="/Users",RequestFormat=WebMessageFormat.Json)]
public string StudentUsers(Student user)
{
    return string.Format("Hello {0}", user.Name);
}

上記のコードは私の REST サービスです。そして私のクライアントコードは次のとおりです。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
Student user = 
    new Stuent {
        Name="Test User", 
        Email = "test@test.com",    
        Password = "test" 
    };                
DataContractJsonSerializer ser = new DataContractJsonSerializer(user.GetType());
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, user);
String json = Encoding.UTF8.GetString(ms.ToArray());
StreamWriter writer = new StreamWriter(request.GetRequestStream());
writer.Write(json);
writer.Close();

var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
    Console.WriteLine(result);
}        

私のサービスはホストされており、webHttpBinding を使用しています。REST サービスをデバッグするとnull、Student オブジェクトで受信します。REST サービスで Name、Email、Password をパラメーターとして使用してテストすると、投稿メソッドがデータを送信していると確信しているため、データは正常に投稿されますが、投稿された Json データは Student オブジェクトに変換されません。RESTfull Service がその Json データをオブジェクトに変換することをどこかで読みました。それは本当ですか、それとも明示的に変換する必要がありますか?

4

2 に答える 2

0

POST されたデータの Content-Length を送信する必要があります。

request.ContentLength = ms.Length;

詳細については、ここを参照してください。

于 2012-08-03T13:40:26.960 に答える