【问题标题】:WCF will not accept an object with a datetime property (400 bad request)WCF 将不接受具有日期时间属性的对象(400 错误请求)
【发布时间】:2017-08-10 20:52:56
【问题描述】:

这是我关于 SO 的第一篇文章,如果我没有提供足够的信息,请原谅我。我有一个 WPF 应用程序试图向我的 WCF Web 服务发送一个包含 DateTime 属性的 EmployeeLogin 对象,并且在调用此 EmployeeLogIn() 方法时我不断收到 400 错误请求错误。我已经搜索了很多地方以寻找答案,但我无法直接回答我的具体情况。

所以我的主要问题是:发送具有DateTime 属性的对象是否会自动转换为 JSON 格式 (\/Date(1237951967000)\/) 并被 wcf 服务接受为有效的@ 987654327@属性,还是将其转换为上述JSON字符串并作为字符串传递给方法?

EDITv2:我的 WPF 应用程序没有以上述正确格式发送此 DateTime 对象,而是将其作为 "2017-08-11T13:47:55.2187627-04:00" 发送,我无法找到将其转换为正确 DateTime 格式的方法。我可以将它作为字符串转换成这种格式,但出于本文末尾所述的原因,这将是最后的努力。

EmployeeLogin EmpLogin = new EmployeeLogin
            {
                EmployeeID = (int)UserName,
                Password = Pass,
                Latitude = 33.45,
                Longitude = 134.44,
                TimeIn = DateTime.Now
            };
HttpResponseMessage response = await
Client.PostAsJsonAsync(string.Format(@"{0}{1}", URL, method),
EmpLogin);

其中 EmployeeLogin 定义如下:

[DataContract]
public class EmployeeLogin
{
    [DataMember]
    public int EmployeeID { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public DateTime TimeIn { get; set; }
    [DataMember]
    public Nullable<double> Latitude { get; set; }
    [DataMember]
    public Nullable<double> Longitude { get; set; }
}

EmployeeLogIn 方法签名如下:

[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, BodyStyle =
WebMessageBodyStyle.WrappedResponse)]
    [return: MessageParameter(Name = "Data")]
    [OperationContract]
    List<int> EmployeeLogIn(EmployeeLogin e);

我知道最简单的解决方案是将DateTime 更改为string 属性并将其转换回Web 服务端的DateTime,但我试图不对Web 服务进行任何更改除非绝对必要。提前谢谢你。

【问题讨论】:

  • 如果您想知道 WCF 如何序列化和反序列化 DateTime,请编写一个返回 DateTime 的 WCF 端点。使用 Fiddler 或其等效工具来检查响应。 Fiddler(或其等价物)还可以帮助您准确了解 PostAsJsonAsync 如何序列化您的 DateTime。
  • 感谢您的回复,PostAsJsonAsync 肯定是根据 Fiddler 错误地格式化了 DateTime:{"EmployeeID":6,"Password":"6490","TimeIn":"2017-08-11T13:47:55.2187627-04:00","Latitude":33.45,"Longitude":134.44} 那么如何将 DateTime 转换为正确的格式?
  • 我终于想通了!链接帖子中问题的答案完美地解释了这个问题,并提供了一个对我来说同样完美的解决方案:stackoverflow.com/questions/33072965/…

标签: c# json wpf wcf datetime


【解决方案1】:

好的,经过数周的搜索,我终于找到了这个问题的答案。我遇到的问题在下面链接的帖子中得到了充分解释,帖子中提供的问题的解决方案对我来说非常有效。这是我的问题的post with the solution。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2011-04-08
    • 2019-07-17
    • 1970-01-01
    • 2017-06-29
    相关资源
    最近更新 更多