2012-05-13 7 views
0

私は本当にシンプルなASP.NET Apiコントローラを1つのメソッドで持っています。Webrequestの後にパラメータにすべてのプロパティがあります

public HttpResponseMessage<User> Post(User user) 
{ 
    return new HttpResponseMessage<User>(new User() { Name = "New User at Server" }); 
} 

私のデバッガでは、メソッドが呼び出されたが、問題はパラメータ "user"がすべてのコンテンツがnullに設定されているということです。私はリクエストとレスポンスを見るためにFiddlerを使用しています。

これはクライアントのサービスコードです。私にエラーを探すために開始するためのいくつかのアイデアを与えることができます

public void AddUser(Models.User user, Action<Models.User> ShowResult) 
    { 
     var uiThreadScheduler = TaskScheduler.FromCurrentSynchronizationContext(); 
     string url = "http://localhost:4921/User"; 
     Uri uri = new Uri(url, UriKind.Absolute); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 

     var sendWebPost = Task.Factory.FromAsync<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream, null) 
     .ContinueWith(task => 
      { 
       Tuple<string, string>[] stringToSend = { Tuple.Create<string, string>("user", ObjectToJson<Models.User>(user)) }; 
       var bytesToSend = GetRequestBytes(stringToSend); 
       using (var stream = task.Result) 
        stream.Write(bytesToSend, 0, bytesToSend.Length); 
      } 
     ).ContinueWith(task => 
      { 
       Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null) 
        .ContinueWith<WebResponse>(task2 => { ValidateResponse(task2); return task2.Result; }) 
        .ContinueWith<Models.User>(task3 => {return JsonToObject<Models.User>(task3);}) 
        .ContinueWith(task4 => { TryClearWorking(); ShowResult(task4.Result); }, uiThreadScheduler); 
      });; 


    } 

    public static string ObjectToJson<T>(T obj) where T : class 
    { 
     DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); 
     MemoryStream stream = new MemoryStream(); 

     StreamReader sr = new StreamReader(stream); 

     serializer.WriteObject(stream, obj); 
     sr.BaseStream.Position = 0; 
     string jsonString = sr.ReadToEnd(); 
     return jsonString; 
    } 


    protected static byte[] GetRequestBytes(Tuple<string, string>[] postParameters) 
    { 
     if (postParameters == null || postParameters.Length == 0) 
      return new byte[0]; 
     var sb = new StringBuilder(); 
     foreach (var key in postParameters) 
      sb.Append(key.Item1 + "=" + key.Item2 + "&"); 
     sb.Length = sb.Length - 1; 

     return Encoding.UTF8.GetBytes(sb.ToString()); 
    } 

誰でも.....

答えて

0

あなたはContent-Lengthヘッダを設定する必要があります。

+0

コードを少し変更する必要がありましたが、変更は必要ありません。ユーザーのコンテンツはまだnullです。 –

関連する問題