【问题标题】:Calling MS WCF REST Service from MVC Client POST BAD Request c#从 MVC 客户端 POST BAD 请求 c# 调用 MS WCF REST 服务
【发布时间】: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


【解决方案1】:

尤里卡!!!!

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

我已将模型更改为传递日期字符串,它现在按预期工作。

瑞克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-07
    • 2014-07-28
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多