Получить параметр из тела запроса в службе данных WCF / ADO.NET - PullRequest
2 голосов
/ 22 октября 2008

Я пытаюсь опубликовать в службе данных ADO.NET, но параметры, кажется, теряются в процессе.

Я получил что-то вроде:

[WebInvoke(Method="POST")]
public int MyMethod(int foo, string bar) {...}

и я делаю ajax-вызов, используя prototype.js как:

var args = {foo: 4, bar: "'test'"};
new Ajax.Requst(baseurl + 'MyMethod',
  method: 'POST',
  parameters: args,
  onSuccess: jadda,
  onFailure: jidda
}

Если я заменим "method: 'POST'" на "method: 'GET'" и "WebInvoke (Method =" POST ")" на "WebGet", то все будет работать, но теперь (используя post) все, что я получаю, это: 1009 *

Неверный запрос - ошибка в синтаксисе запроса.

от службы.

Единственное исправление (которое я не хочу использовать) - отправка всех параметров в URL, даже когда я выполняю сообщение. Любые идеи приветствуются.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2008

Веб-сервисы WCF и ASMX, как правило, немного разборчивы в теле запроса. Когда вы указываете аргументы, запрос обычно кодируется как сообщение формы, т.е. foo = 4 & bar = test, вместо этого вам нужно указать литерал javascript: -

   new Ajax.Request(baseurl + 'MyMethod', {
        method: 'POST',
        postBody: '{"foo":4, "bar":"test"}',
        encoding: "UTF-8",
        contentType: "application/json;",
        onSuccess: function(result) {
            alert(result.responseJSON.d); 
        },
        onFailure: function() {
            alert("Error");
        }
    });
0 голосов
/ 22 октября 2008

Вы говорите, что я должен обернуть параметры в javascript, как

var args = {Request: {foo: 3, bar: "'test'"}}

или я что-то упустил?

Я пытался добавить:

ResponseFormat=WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json, BodyStyle=WebMessageBodyStyle.Wrapped

к атрибуту WebInvoke, но без результата. Я пытался установить «Content-Type» (в js POST ajax-call) на «application / x-www-form-urlencoding» и «application / json; charset = utf-8», но без результата. *

0 голосов
/ 22 октября 2008

Если вы хотите использовать POST, вам нужно указать параметры для переноса в запросе в атрибуте WebInvoke, если параметры не содержатся в объекте (например, контракт сообщения). Это имеет смысл, поскольку невозможно сериализовать параметры без использования json или xml.

Распакованный, который на самом деле не является XML как отсутствующий корневой элемент

<foo>1</foo>
<bar>abc</bar>

Завернутый, действительный XML

<Request>
   <foo>1</foo>
   <bar>abc</bar>
</Request>

Этот образец также относится к JSON

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...