.Net Rest API, извлекающий тело сообщения

#c# #wcf #json #api

#c# #wcf #json #API

Вопрос:

У меня есть Rest API, разработанный с использованием WinAPI WCF.

 public class paramval
{
    string name;
}

[ServiceContract]
public class myQuery
{
    [WebInvoke(UriTemplate = "{systemCode}/{objectID}", Method = "POST")]

    public myResult Get(string systemCode, int objectID, paramval pval)
    {
    }

}
  

Значение pval всегда равно null.

Я использую тестовый клиентский инструмент WCF Web API.

 URL:      http://localhost:11556/api/contacts/abc/111
Request:  POST
Headers:  Accept:*/*
          Content-Type:application/json
          Content-Length:16
Body      {"name":"Frank"}
  

Есть идеи?

Комментарии:

1. Если я изменю тип pval на jsonString, я смогу получать объекты Json. Хотя я хотел бы что-то более общее.

Ответ №1:

Попробуйте аннотировать свой класс с помощью DataContractAttribute и DataMemberAttribute и использовать общедоступное свойство для Name (изменил класс и имя свойства, чтобы использовать оболочку pascal):

 [DataContract]
public class ParamVal 
{ 
    [DataMember(Name = "name")]
    public string Name { get; set; }
} 
  

Комментарии:

1. Вам не нужно добавлять DataContract и DataMember с новым WCF WebAPI

Ответ №2:

Ваш UriTemplate указывает только сопоставления для systemCode и objectID . Нужно ли что-то добавить в шаблон, чтобы также извлечь значение для свойства Name paramval ?

Комментарии:

1. Параметр отправляется не в URL, а в теле сообщения