2015-10-05 126 views
0

我刚刚开始一些R & D集成了一个调用WebApi的MVC应用程序,我正在编写这两个应用程序。 WebApi最终会被不同的应用程序调用,所以我想在这里有业务逻辑。如何从PostAsync获取模型数据?

我已经创建了下面这个简单的方法我API的服务器上:

[HttpPost] 
public HttpResponseMessage Get(ShipmentGetCarrierModel view) 
{ 
    var response = Request.CreateResponse<ShipmentGetCarrierModel>(HttpStatusCode.OK, view); 
    return response; 

    //return new HttpResponseMessage(HttpStatusCode.OK); 
} 

我从我的MVC应用程序中调用此方法如下:

public ActionResult GetOrderNumber2(int orderNumber) 
{ 
    using (var apiServer = new HttpClient()) 
    { 
     apiServer.BaseAddress = new Uri("http://localhost:52126"); 
     apiServer.DefaultRequestHeaders.Accept.Clear(); 
     apiServer.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     ShipmentGetCarrierModel model = new ShipmentGetCarrierModel(); 
     model.nOrderNumber = 100; 

     // New code: 
     HttpResponseMessage response = 
      apiServer.PostAsync("api/PC/Get", 
      model, 
     new JsonMediaTypeFormatter()).Result; 


     if (response.IsSuccessStatusCode) 
     { 
      return Content(response.Content.ToString()); 
     } 
    } 

    return Content("NOT " + orderNumber.ToString()); 
} 

我的模型,它是两个应用程序相同是:

public class ShipmentGetCarrierModel 
{ 
    public int nID { get; set; } 
    public int nOrderNumber { get; set; } 
    public string cConsigneeName { get; set; } 
    public string cCarrierCode { get; set; } 
    public string cConsigneeAddress1 { get; set; } 
    public string cConsigneeAddress2 { get; set; } 
    public string cConsigneeCity { get; set; } 
    public string cConsigneeProvince { get; set; } 
    public string cConsigneePostalCode { get; set; } 
    public string cConsigneeTelephone { get; set; } 
    public string cConsigneeContact { get; set; } 
    public string cConsigneeCountry { get; set; } 
    public Boolean? lIsPharmilink { get; set; } 
} 

我得到的响应代码,但我看不到模型dat一个在WebAPI创建的调试器中返回的结果。

讽刺的是,当我使用招分析了电话,我看到我的模型与他们的空值。

Fiddler Image

显然,我在这里失去了一些东西。 TIA 马克

+0

“我看不到模型数据”您期望看到它但它不在那里? – usr

+0

也许你应该考虑返回一个JsonResult例如: 返回JSON(视图,JsonRequestBehavior.AllowGet); –

+0

我刚刚添加了上面的模型代码。 – Mark

回答

1

我终于发现我在做什么错误的;我在拨打HttpClient后错过了两个步骤

public ActionResult GetOrderNumber2(int orderNumber) 
{ 
    using (var apiServer = new HttpClient()) 
    { 
     apiServer.BaseAddress = new Uri("http://localhost:52126"); 
     apiServer.DefaultRequestHeaders.Accept.Clear(); 
     apiServer.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     ShipmentGetCarrierModel model = new ShipmentGetCarrierModel(); 
     model.nOrderNumber = 100; 

     // New code: 
     HttpResponseMessage response = 
      apiServer.PostAsync("api/CPC/Get", 
      model, 
     new JsonMediaTypeFormatter()).Result; 

     // I was missing this !!! 
     string returnResult = response.Content.ReadAsStringAsync().Result; 
     JavaScriptSerializer JSserializer = new JavaScriptSerializer(); 
     ShipmentGetCarrierModel returnModel = JSserializer.Deserialize<ShipmentGetCarrierModel>(returnResult); 


     if (response.IsSuccessStatusCode) 
     { 
      return Content(returnModel.ToString()); 
     } 
    } 

    return Content("NOT " + orderNumber.ToString()); 
}