я должен создать PUT службы RESTful WCF, которая будет иметь URI шаблон что-то вроде этого:Как создать метод в службе WCF RESTful в данном сценарии?
/rs/close_copy/{user_token}?term={term}&brand={brandname}
Запрос, который приходит к нам имеет тело JSON в этом формате:
“acc”:
“counters”:[
{“format”:
“ink”:
“ctr”:
“duplex”: },
{…}]
Но issue is, "counters"
Параметр выше не всегда является массивом объекта JSON, как ожидалось. Когда в "counter"
присутствует только один элемент, запрос приходит как отдельный объект JSON, а не как список объектов JSON с одним элементом.
Это третья сторона, которая звонит в наш сервис, и они не могут внести изменения в свой запрос. Я реализовал в WCF-то, как показано ниже:
[WebInvoke(Method = "PUT", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/rs/close_copy/{user_token}?term={term}&brand={brandname}")]
JsonResponse EndSession(string user_token, string term, string brandname, EndSessionRequest request);
где EndSessionRequest
является:
[DataContract]
public class EndSessionRequest
{
[DataMember]
public string acc { get; set; }
[DataMember]
public IEnumerable<PageDetails> counters { get; set; }
}
и PageDetails
является:
[DataContract]
public class PageDetails
{
[DataMember]
public string format { get; set; }
[DataMember]
public string ink { get; set; }
[DataMember]
public int ctr { get; set; }
[DataMember]
public bool duplex { get; set; }
}
Проблема с вышеуказанной реализации является, когда counters
имеет один элемент, запрос приходит к нам как:
{"acc":"ramaccnz","counters":{"ctr":"2","duplex":"false","format":"A4","ink":"bw"}}
Но согласно нашей реализации, запрос, как ожидается, как:
{"acc":"ramaccnz","counters":[{"ctr":"2","duplex":"false","format":"A4","ink":"bw"}]}
В других случаях, когда запрос содержит несколько элементов, наша работа по обслуживанию, как и ожидалось.
Есть ли способ справиться с этим в реализации WCF?
Ваш код верный, проблема заключается в стороннем клиенте, который не звонит вам правильно, соблюдая ваш контракт на обслуживание. –