Member 14601214 Ответов: 1

Как сделать сервис WCF REST с массивом параметров


Это мой класс :
<pre>[DataContract]
public class UserIdParams 
{
    [DataMember]
    public int UserId { get; set; }
    [DataMember]
    public List<int> ListUserId { get; set; }
}


он содержит как список целых чисел, так и целое число.

Моя цель - создать сервис WCF REST : GetUserByID, чтобы получить список пользователей по идентификаторам.


но , как мы знаем, мы не можем передать массив или сложные типы в качестве входного параметра. в WCF отдыха ,

(и когда я тестирую его таким образом, у меня есть эта ошибка:

ошибка-запрос-строка-преобразователь — imgbb.com[^]

)

С другой стороны , это прекрасно работало для WCF SOAP.

Итак, есть идеи, как решить мою проблему, чтобы получить всех пользователей с WCF REST и входным параметром является массив ?

спасибо,

Что я уже пробовал:

[OperationContract]
  [WebGet]
  List<User> GetUserByID (UserIdParams userIdParams);

F-ES Sitecore

Я погуглил "параметр массива wcf rest" и нашел несколько возможных решений. Вероятно, было бы быстрее просто погуглить его самостоятельно и пройти через них.

Member 14601214

извините , но я не нашел никакого решения этой проблемы, и я пробую свой код .- всегда одна и та же проблема..
На самом деле , все параметры в порядке с rest , но для параметра входного массива это очень сложно

F-ES Sitecore

Неужели? Я только что погуглил "параметр массива wcf rest", и второй результат предполагал то, что было опубликовано в решении 1.

1 Ответов

Рейтинг:
9

dnxit

Обычно операции GET поддерживают параметры только в пути или строке запроса, поэтому они не подходят для сложных типов, таких как списки или массивы.

С другой стороны, вы можете передать коллекцию как параметр body для записи операция.


Таким образом, вам придется либо изменить операцию на POST, либо сделать аргумент строкой с разделителями, которую вы можете обработать на стороне сервера для создания массива

[DataContract]
public class UserIdParams 
{
    [DataMember]
    public int UserId { get; set; }
    [DataMember]
    public string DelimitedUserIds { get; set; }
}

// Then on Server do something like 

string DelimitedUserIds = "9,3,12,43,2"
List<int> UserIds = DelimitedUserIds .Split(',').Select(int.Parse).ToList();


Опять же я бы предложил сделать это постом и отправить парамы в тело.


Member 14601214

Большое спасибо dnxit !! это работает как волшебство !

На самом деле, я делаю строку с разделителями и все еще с GET , я получаю всех пользователей, которых я хочу из списка идентификаторов,

dnxit

всегда пожалуйста, приятно знать, что твоя проблема нашла решение :)