Хобрук: Ваш путь к мастерству в программировании

Параметр тела Rest WCF Post Json всегда имеет значение null при использовании Fiddler

Я боролся с этим последние несколько дней. Я изучил проблему и попробовал опубликованные решения. Однако это не сработало. У меня есть метод REST WCF Post, который имеет

     [OperationContract(Name = "ImportRawJson")]
    WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json,
            UriTemplate = "ImportRawJson/username/{username}/password/{password}/fileName/{fileName}")]
    string ImportRawJson(string username, string password, string fileName, string jsonStream);

Я могу использовать это через веб-клиент. Однако, когда я пытаюсь позвонить через Fiddler, как показано ниже, параметр body всегда приводит к нулю, и я получаю исключение.

Fiddler: отправьте http: //localhost/TimesheetService/Timesheet.svc/ImportRawJson/username/user/password/pwd/fileName/testfiddler

Заголовки запроса: User-Agent: Fiddler Host: localhost Content-Length: 32 Content-Type: application / json; charset = utf-8

Тело запроса: {"jsonStream": {"ImportRaw": {"TestXml": {"xml": "test"}}}}

Ошибка: HTTP / 1.1 400 Bad Request Cache-Control: private Content-Length: 127 Content-Type: application / json; charset = utf-8 Сервер: Microsoft-IIS / 7.5 X-AspNet-Version: 4.0.30319 Set-Cookie: ASP.NET_SessionId = wh4qxcu1x0vmiv45mmzuuaup; путь = /; HttpOnly X-Powered-By: ASP.NET Дата: 7 мая 2013 г., 14:00:58 GMT

{"ErrorCode": "Ошибка", "Сообщение": "Процедура или функция ожидают параметр 'jsonStream', который не был предоставлен."}

Любая помощь относительно того, как я могу передать параметр тела. Я действительно ценю. Я застрял на этом этапе. Пожалуйста помоги!! заранее спасибо



Ответы:


1

В вашем коде есть пара проблем. Во-первых, если под «потоком JSON» вы имеете в виду любой документ JSON, вы не сможете использовать тип string для своего кода. Вместо этого вам нужно принять его как Stream (который может принимать любой произвольный ввод). Если вы принимаете ввод как строку, вы должны передать ему строку JSON. А поскольку вы устанавливаете тип тела на WrappedRequest, вам нужно обернуть строку JSON в объект, причем имя параметра является именем члена, а значение, которое вы хотите передать своей функции, является значением. Например, чтобы передать в операцию строку hello world, вам нужно передать это тело запроса:

{"jsonStream":"hello world"}

Но если я правильно угадал, и вы хотите взять любой произвольный JSON, вам нужно пойти с параметром Stream. Сообщение в блоге по адресу http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx содержит дополнительную информацию о том, как реализовать это.

08.05.2013
  • @Carlosfigueria: Большое вам спасибо !! Да, я хочу принять документ JSON. И ссылка мне очень помогла. Я отметил ответ. Однако мне также необходимо принять строку json для еще одного вызова метода с аналогичной подписью. И, используя {jsonStream: hello world}, я всегда сталкиваюсь с исключением нулевых значений. Пожалуйста помогите. 08.05.2013
  • Выяснили, в чем проблема. Спасибо, что указали в правильном направлении. 08.05.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..