Передать несколько параметров в WCF Web API-сервис - PullRequest
0 голосов
/ 28 октября 2011

Мне интересно, что происходит за кулисами при создании веб-службы WCF.

В одном старом проекте у меня есть методы, которые я могу вызвать из JavaScript, которые выглядят следующим образом

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
IEnumerable<Result> SearchObjects(string x, int y, double z);

И это работает, когда я отправляю {"x": "что-то", "y": 1, "z": 1.5} из JavaScript.

Через пару месяцев после создания этого веб-сервиса я нашел веб-API WCF и попытался создать нечто подобное.

Разница заключалась в том, что я создал маршрут в моем Global.asax с помощью HttpServiceHostFactory ()

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

Сведения об исключении: System.InvalidOperationException: HttpOperationHandlerFactory не может определить входной параметр, который должен быть связан с содержимым сообщения запроса для операции службы «Invoke_LoginRequest». Если операция не ожидает содержимого в сообщении запроса, используйте метод HTTP GET с операцией. В противном случае убедитесь, что один из входных параметров имеет свойство IsContentParameter, установленное в значение «True», или является типом, который можно назначить одному из следующих параметров: HttpContent, ObjectContent 1, HttpRequestMessage or HttpRequestMessage 1.

И чтобы он заработал, мне нужно объявить метод следующим образом (VB.Net)

Public Function Invoke_LoginRequest(ByVal request As HttpRequestMessage(Of JsonValue)) As HttpResponseMessage(Of String)

Но тогда мне нужно проанализировать JsonValue вручную. Так как же работает старая версия? И есть ли способ, которым я мог бы вернуть это поведение?

С наилучшими пожеланиями Jesper

1 Ответ

0 голосов
/ 29 октября 2011

1) Определите класс, содержащий данные, которые вы хотите получить, т. Е.

public class Model
{
    public string x { get; set; }
    public int y { get; set; }
    public double z { get; set; }
}

2) Определите рабочий параметр как ObjectContent<Model>

public HttpResponseMessage Post(ObjectContent<Model> c){
    Model m = c.ReadAs();
    ...
}

НТН Pedro

...