Служба WCF REST: параметр метода (объект) всегда имеет значение null

Я видел несколько подобных вопросов здесь, но ни один из них не помог решить эту конкретную проблему.

У меня есть веб-служба WCF Rest, и она работает нормально для GET. Один метод — это POST, и всякий раз, когда я вызываю его, передавая параметр json, передаваемый параметр имеет значение 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);
    }

Контракт веб-службы WCF:

    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetBooked")]

    List<Contact> GetBooked(ContactParameter contactParameter);

Тип параметра контакта

namespace CatService.Types
    {
        [DataContract (Name = "contactParameter")]
        public class ContactParameter
            {
                [DataMember(Name = "Code")]
                public string Code { get; set; }
                [DataMember(Name = "ApptDateTo")]
                public DateTime ApptDateTo { get; set; }
                [DataMember(Name = "ApptDateFrom")]
                public DateTime ApptDateFrom { get; set; }
                [DataMember(Name = "Type")]
                public Enums.Enums.Type Type { get; set; }
                [DataMember(Name = "Status")]
                public string Status { get; set; }

            }
   }

Я попытался изменить WebMessageBodyStyle.Bare, но затем я получаю StatusCode: 400, ReasonPhrase: «Неверный запрос». Если я попробую тестовый метод, который принимает только строку, он работает.


person the_tr00per    schedule 21.11.2017    source источник


Ответы (2)


Я также получаю ту же проблему. Я предлагаю вам попробовать метод Post в другом консольном приложении. Из-за метода POST не быть на URL.

person Kont Dooku    schedule 21.11.2017

Это была проблема с датой и временем, я не реализовал ответ в предыдущем сообщении. В основном:

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

Затем, когда вы сериализуете....

 var json = JsonConvert.SerializeObject(jsonString, microsoftDateFormatSettings);
person the_tr00per    schedule 21.11.2017