2013-01-22 59 views
1

這是我在這個頁面上的第一個問題。 我在MVC的WebAPI和Windows Store應用程序,我想請我和W8的應用對象的網絡API:httpClient.PostAsync - Windows應用商店 - mvc webapi

我的對象:

var objobj = new ObjectCompleteAdd() 
      { 
       NameObject = "Name", 
       DescriptionObject = "Description", 
       isActveObject = true, 
       ContractStartObject = DateTime.Parse("2005-09-01"), 
       CityAdress = " CityAdress", 
       PostCodeAdress = "PostCode", 
} 

類BLL:

public class ObjectCompleteAdd 
    { 
     public string NameObject { get; set; } 
     public string DescriptionObject { get; set; } 
     public bool? isActveObject { get; set; } 
     public DateTime ContractStartObject { get; set; } 
     public string CityAdress { get; set; } 
     public string PostCodeAdress { get; set; } 
} 

和我的功能:

var dataContractSerializer = new DataContractJsonSerializer(typeof(ObjectCompleteAdd)); 
      var memoryStream = new MemoryStream(); 
      dataContractSerializer.WriteObject(memoryStream, objobj); 
      HttpContent content = new StreamContent(memoryStream); 

      await client.PostAsync("api/ObjectISApi",content); 

在webapi我有帖子:

// POST api/ObjectISApi  
     public HttpResponseMessage PostObjectIS(ObjectCompleteAdd obj) 
     {  
      ObjectIS.AddNewObject(obj); 
      return Request.CreateResponse(HttpStatusCode.OK); 

     } 

它不工作

回答

0

序列化的對象後,倒帶流,設置位置爲零:

var dataContractSerializer = new DataContractJsonSerializer(typeof(ObjectCompleteAdd)); 
var memoryStream = new MemoryStream(); 
dataContractSerializer.WriteObject(memoryStream, objobj); 

// Rewind stream. 
memoryStream.Position = 0; 

HttpContent content = new StreamContent(memoryStream); 

UPDATE:好吧,我想你也需要修改你的服務器代碼,正確地反序列化你發送的JSON對象。 ASP.NET不會自動反序列化JSON。

public ActionResult PostObjectIS() 
{ 
    StreamReader reader = new StreamReader(Request.InputStream); 
    string contentString = reader.ReadToEnd(); 

    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
    var oca = jsonSerializer.Deserialize<ObjectCompleteAdd>(contentString); 
    Debug.WriteLine(oca.NameObject); 

    return View(); 
}