2017-08-01 66 views
2

我希望有人能帮助我。我有一个WCF REST服务,它正在为所有GET功能正常工作。但我不能让POST方法工作。我的服务合同是从MVC客户端POST BAD请求调用MS WCF REST服务c#

[OperationContract] 
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "NewEmployeeLeave/")] 
    string addTimeOff(mmpTimeOff data); 

这是调用下面

// addTimeOff 
    // Add a new time off record with passed information 
    public string addTimeOff(mmpTimeOff data) 
    { 
     try 
     { 
      // Add the new record to the employees leave requests 
      mmpTimeOff newTimeOff = data; 
      db.TimeOffs.Add(new TimeOff 
      { 
       StartDate = newTimeOff.StartDate, 
       EndDate = newTimeOff.EndDate, 
       PersonId = newTimeOff.PersonId, 
       Manager = newTimeOff.Manager, 
       TimeOffType = newTimeOff.TimeOffType, 
       Status = newTimeOff.Status, 
       Notes = newTimeOff.Notes 
      }); 

      db.SaveChanges(); 
     } 
     // Make sure that we can push the error back to the client. 
     catch (Exception e) 
     { 
      return e.Message; 
     } 

     return "ok"; 
    } 

客户端代码如下所示。

client = new HttpClient(); 
     HttpResponseMessage response=new HttpResponseMessage(); 
     mmpPerson user = new mmpPerson(); 
     client.BaseAddress = new Uri(url); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     try 
     { 
      mmpTimeOff newLeave = new mmpTimeOff() 
      { 
       PersonId = user.Id, 
       StartDate = DateTime.Parse("2017-10-22"), 
       EndDate = DateTime.Parse("2017-10-28"), 
       TimeOffType = "Annual", 
       Manager = user.Manager, 
       Status = "Appr" 

      }; 

      response = await client.PostAsJsonAsync(url + "/newemployeeleave", newLeave); 
      if (response.IsSuccessStatusCode) 
      { 
       ViewBag.Added = "Added New Leave Successfully"; 
      } 

当客户端运行时,我得到一个空值被发送到addTimeOff方法。

该类在服务定义为

public class mmpTimeOff 
{ 
    [DataMember] 
    public int Id { get; set; } 
    [DataMember] 
    public System.DateTime StartDate { get; set; } 
    [DataMember] 
    public System.DateTime EndDate { get; set; } 
    [DataMember] 
    public string TimeOffType { get; set; } 
    [DataMember] 
    public int PersonId { get; set; } 
    [DataMember] 
    public string Status { get; set; } 
    [DataMember] 
    public Nullable<int> Manager { get; set; } 
    [DataMember] 
    public string Notes { get; set; } 

} 

,并绑定到客户机中作为连接的服务。

如何成功获取通过服务的对象数据。

感谢所有帮助。

里克

+1

因为你正在使用'BodyStyle = WebMessageBodyStyle.Wrapped'你会发现这个答案有帮助,它解释了如何包装你的参数https://stackoverflow.com/a/12572821/920557。希望能帮助到你。 –

回答

0

尤里卡!!!!

谢谢尤金。在阅读你的回应并查看链接后,我使用POSTMAN做了一些进一步的调查,并且我发现PostAsJsonAsync确实在对所传递的数据进行json转换,但由于对象的StartDate和EndDate属性是DateTime对象,所以似乎json转换不喜欢它。

我改变了模型来传递日期字符串,而现在它按预期工作。

里克