#wcf #rest
#wcf #rest
Вопрос:
У меня есть стандартное приложение WCF Rest (Web.config по умолчанию, веб-маршрутизация). Я не могу заставить платформу WCF автоматически десериализовать поток запросов в типизированные объекты. У меня есть служба с параметром метода в форме…
[WebInvoke(Method = "POST",
UriTemplate = "",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
ResponseFormat = WebMessageFormat.Json)]
MethodA(FirstParam first, SecondParam second)
Если я инициирую запрос от fiddler или jQuery, используя $.ajax, я получаю ошибку 400 Bad Request. Я провел множество поисков и обнаружил, что изменение метода sig для использования System.IO.Stream позволяет выполнять метод, однако это также увеличивает накладные расходы на десериализацию объектов.
Исходное тело запроса выглядит следующим образом
{
"first":"{"p1":"p1 value","p2":"p2 value","p3":100"p4":null}",
"second":"{"p1":"p1 value"}"
}
Да, приложение даже не врывается в саму службу, если у метода нет потока или аргументов. В этой службе есть только 1 метод post, другой — метод GET, который работает корректно.
Я использовал http://www.codeproject.com/KB/ajax/jQueryWCFRest.aspx в качестве эталонной реализации, но не удалось заставить ее работать в этом решении.
Есть ли что-то, чего мне здесь не хватает, что, надеюсь, сможет увидеть кто-то другой?
Leon
Ответ №1:
Блин… проблема оказалась в том, как запрос сериализовал значения!
{
"first":"{"p1":"p1 value","p2":"p2 value","p3":100"p4":null}",
"second":"{"p1":"p1 value"}"
}
Должно было быть без экранированных кавычек….
{
"first":"{"p1":"p1 value","p2":"p2 value","p3":100"p4":null}",
"second":"{"p1":"p1 value"}"
}
Причина, по которой это происходило, заключалась в том, что JSON.stringify вызывался не только для обернутых параметров запроса, но и для каждого параметра.