Невозможно передать словарь в качестве параметра службе REST WCF в методе типа GET - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть требование, когда большинство API-файлов WCF REST имеют тип GET и получают словарь в качестве параметра. Но когда он помещается, как показано ниже, он выдает ошибку.

[WebGet(UriTemplate = "/GetVersion?Param1={serverDetails}")]
public Version GetVersion(Dictionary<string, string> keyValue)
{

}

Это выдает ошибку ниже:

Операция 'GetVersion' в контракте 'IDeploy' имеет переменную запроса с именем ' keyValue 'типа' System.Collections.Generi c .Dictionary'2 [System.String, System.String] ', но типа' System.Collections.Generi c .Dictionary'2 [System.String, System. String] 'не конвертируется с помощью QueryStringConverter. Переменные для значений запроса UriTemplate должны иметь типы, которые можно преобразовать с помощью QueryStringConverter.

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

1 Ответ

0 голосов
/ 20 апреля 2020

Для поддержки таких сложных параметров запрос Get не может выполнить sh его. Нам нужен Post/Put/Delete запрос для выполнения этой задачи, так как мы можем установить эти сложные параметры в теле запроса.

[OperationContract]
        [WebInvoke(RequestFormat =WebMessageFormat.Json,BodyStyle =WebMessageBodyStyle.Bare)]
        string GetData(Dictionary<string,string> value);

Ниже приведено содержание JSON запроса образца.

[{
    "Key":"Key1",
    "Value":"World"
},
{
    "Key":"Key2",
    "Value":"Hello"
}]

Ниже приведено содержание Xml примера запроса при установке на WebMessageFormat. Xml

<ArrayOfKeyValueOfstringstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <KeyValueOfstringstring>
    <Key>Key1</Key>
    <Value>Hello</Value>
  </KeyValueOfstringstring>
  <KeyValueOfstringstring>
    <Key>Key2</Key>
    <Value>World</Value>
  </KeyValueOfstringstring>
</ArrayOfKeyValueOfstringstring>

Не стесняйтесь сообщить мне, если проблема все еще существует.

...