【发布时间】:2017-08-01 18:21:57
【问题描述】:
我希望有人可以帮助我。我有一个 WCF REST 服务,它对所有 GET 功能都正常工作。但是,我无法使 POST 方法正常工作。我的服务合同是
[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; }
}
并作为连接服务绑定到客户端。
我如何成功地将对象数据传递给服务。
感谢所有帮助。
瑞克
【问题讨论】:
-
因为您使用的是
BodyStyle = WebMessageBodyStyle.Wrapped,您可能会发现此答案很有帮助,它解释了如何包装您的参数stackoverflow.com/a/12572821/920557。希望对您有所帮助。
标签: c# rest wcf model-view-controller