C# 通过HttpClient调用Rest WCF服务

C# 通过HttpClient调用Rest WCF服务,c#,rest,wcf,httpclient,C#,Rest,Wcf,Httpclient,我正在尝试使用HttpClient通过Xamarin调用WCF Rest服务。我已经尝试了很多方法,但我需要传递一个自定义类型 我们收到Http错误400-请求错误 我创建了一个基本的测试来模拟Xamarin所做的,但仍然会得到相同的错误。代码如下: WCF服务接口/方法: [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessa

我正在尝试使用HttpClient通过Xamarin调用WCF Rest服务。我已经尝试了很多方法,但我需要传递一个自定义类型

我们收到Http错误400-请求错误

我创建了一个基本的测试来模拟Xamarin所做的,但仍然会得到相同的错误。代码如下:

WCF服务接口/方法:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "GetBookedContacts")]
    List<Contact> GetBookedContacts(ContactParameter contactParameter);
我们正在使用Newtonsoft.Json库转换自定义类型

如果我在同一个web服务上创建另一个函数,只使用一个字符串参数,它就可以正常工作

这必须是一个类型问题,但我在web服务中标记了以下类型:

[DataContract]
public class ContactParameter
{
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public DateTime ApptDateTo { get; set; }
    [DataMember]
    public DateTime ApptDateFrom { get; set; }
    [DataMember]
    public Enums.Enums.ContactType Type { get; set; }
    [DataMember]
    public string Status { get; set; }

}

    public class Enums
{
    [DataContract]
    public enum ContactType
    {
        [DataMember]
        [EnumMember]
        Person= 'P',
        [DataMember]
        [EnumMember]
        Other= 'T'
    }
}

问题在于日期时间格式。您应该设置日期时间格式。大概是这样的:

   JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
   {
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
  };

您可以阅读更多。

嗨,谢谢您的帮助。当我添加代码时,它会更进一步。现在调用web方法,但传递的对象为null。你能想到什么明显的原因吗?我传递的json是:{“Code”:“0001”,“ApptDateTo”:“2017-11-22T11:24:17.2216251+00:00”,“ApptDateFrom”:“2017-11-21T11:24:17.2196202+00:00”,“Type”:67,“Status”:“}这完全是另外一回事。它可以是任何东西。我建议结束这个问题,再问另一个问题,并提供服务器端代码。我猜你的代码有问题。是的,我会标记为已回答,因为不再有“错误请求”。我认为这是一个命名问题,就好像我用一个字符串来做一个测试方法,并且在jSon中把参数命名为不同的名称一样,它是空的。如果名称匹配,则传递字符串ok
   JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
   {
      DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
  };