WCF REST服务:方法参数(对象)始终为null

WCF REST服务:方法参数(对象)始终为null,rest,wcf,datacontract,datamember,Rest,Wcf,Datacontract,Datamember,我在这里看到了一些类似的问题,但没有一个能解决这个问题 我有一个WCF Rest web服务,它可以正常工作。一个方法是POST,每当我调用它传递json参数时,当该方法在web服务器上运行时,传递的参数为null 代码如下: 客户端呼叫: public async Task Test() { HttpClient client; client = new HttpClient(); client.MaxResponseContent

我在这里看到了一些类似的问题,但没有一个能解决这个问题

我有一个WCF Rest web服务,它可以正常工作。一个方法是POST,每当我调用它传递json参数时,当该方法在web服务器上运行时,传递的参数为null

代码如下:

客户端呼叫:

   public async Task Test()
    {
        HttpClient client;
        client = new HttpClient();
        client.MaxResponseContentBufferSize = 2147483646;
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        ContactParameter cp = new ContactParameter();
        cp.ApptDateFrom = DateTime.Now;
        cp.ApptDateTo = DateTime.Now.AddDays(1);
        cp.Code = "00";
        cp.Type = Enums.ContactType.Person;
        cp.Status = string.Empty;

        string RestUrl = "http://localhost:61919/data.svc/GetBooked";
        var uri = new Uri(string.Format(RestUrl, string.Empty));

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

        //json string = {"Code":"00","ApptDateTo":"2017-11-22T14:02:01.8758558+00:00","ApptDateFrom":"2017-11-21T14:02:01.8718458+00:00","Type":67,"Status":"A"}
        var json = JsonConvert.SerializeObject(cp);

        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var response = await client.PostAsync(uri, content);
    }
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetBooked")]

    List<Contact> GetBooked(ContactParameter contactParameter);
WCF Web服务合同:

   public async Task Test()
    {
        HttpClient client;
        client = new HttpClient();
        client.MaxResponseContentBufferSize = 2147483646;
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        ContactParameter cp = new ContactParameter();
        cp.ApptDateFrom = DateTime.Now;
        cp.ApptDateTo = DateTime.Now.AddDays(1);
        cp.Code = "00";
        cp.Type = Enums.ContactType.Person;
        cp.Status = string.Empty;

        string RestUrl = "http://localhost:61919/data.svc/GetBooked";
        var uri = new Uri(string.Format(RestUrl, string.Empty));

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

        //json string = {"Code":"00","ApptDateTo":"2017-11-22T14:02:01.8758558+00:00","ApptDateFrom":"2017-11-21T14:02:01.8718458+00:00","Type":67,"Status":"A"}
        var json = JsonConvert.SerializeObject(cp);

        var content = new StringContent(json, Encoding.UTF8, "application/json");
        var response = await client.PostAsync(uri, content);
    }
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetBooked")]

    List<Contact> GetBooked(ContactParameter contactParameter);
我尝试更改WebMessageBodyStyle.Bare,但随后我得到一个状态码:400,原因短语:“请求错误”。
如果我尝试一个只接受字符串的测试方法,它会工作。

我也会遇到同样的问题。我建议,你应该在另一个控制台应用程序上尝试你的Post方法。因为POST方法不在URL上。

我也遇到了同样的问题。我建议,你应该在另一个控制台应用程序上尝试你的Post方法。因为POST方法不在URL上。

这是一个日期时间问题,我没有在前一篇文章中实现答案。基本原则:

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
        };
然后当你序列化

 var json = JsonConvert.SerializeObject(jsonString, microsoftDateFormatSettings);

这是一个日期时间问题,我没有实现上一篇文章中的答案。基本原则:

JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
        {
            DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
        };
然后当你序列化

 var json = JsonConvert.SerializeObject(jsonString, microsoftDateFormatSettings);