Веб-сервис RESTful, возвращающий XML, а не JSON - PullRequest
5 голосов
/ 01 декабря 2011

У меня есть этот простой веб-сервис, сейчас он просто смотрит, является ли номер детали A123456789, а затем возвращает номер модели.Это будет заменено логикой, которая будет соединяться с базой данных, чтобы проверить соответствие и затем вернуть фактический номер модели.Но на данный момент мне просто нужно вернуть некоторые фиктивные данные JSON.Однако, когда я использую Fiddler и смотрю на вызов в веб-браузере http://localhost:PORT/Scan/Model/A123456789, он возвращает это

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Model: CVS-1679</string>

Но когда я выполняю GET в fiddler с тем же URI, я получаю

"Model: CVS-1679"

Только на вкладке textview.

Почему он возвращается в XML (в браузере и в тексте в Fiddler), а не в JSON, когда я настроил свой ResponseFormat на JSON?

Мой код:

[WebGet(UriTemplate = "Model/{partno}", ResponseFormat = WebMessageFormat.Json)]
        public string Model(string partno)
        {
            if (partno == "A123456789")
            {
                string modelno = "CVS-1679";
                return "Model: " + modelno;
            }
            else
            {
                string modelno = "CVS-1601";
                return "Model: " + modelno;
            }
        }

Ответы [ 2 ]

5 голосов
/ 01 декабря 2011

ASP.NET webservice возвращает сообщение XML / SOAP по умолчанию. Если вы хотите вернуть строку Json, вам нужно украсить Webservice с атрибутом [ScriptService]. Это сообщает IIS, что эта служба будет использоваться вызовами ASP.NET AJAX. Эти атрибуты являются частью System.Web.Extensions.

Вы можете определить формат ответа веб-метода, украсив веб-метод атрибутом ScriptMethod.

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]

Однако даже после оформления веб-службы и веб-метода с помощью этих атрибутов ответ может быть в формате XML. Это происходит, когда клиент, который делает запрос, не устанавливает тип содержимого заголовка запроса как «application / json».

Перед возвратом вызова метода из сериализуемого webmethod в строку Json с использованием JavaScriptSerializer

Отладка WebService с использованием Fiddler

Использовать fiddler для тестирования веб-сервиса довольно просто. На следующем рисунке показан пример вызова веб-службы, которая возвращает строку json. Обратите внимание, что тип содержимого запроса установлен на application / json. Параметры, ожидаемые webserivce, упоминаются в разделе «Тело запроса». enter image description here

Обратите внимание, что тип содержимого запроса установлен на application / json.

4 голосов
/ 01 декабря 2011

Он возвращается в Json, если вы посмотрите на формат данных, которые вы получаете ...

key: value

или в вашем случае

string Model = "CVS-1679"

Когда вы просматриваете его в fiddler, вы видите сырой транспорт сериализации из одной конечной точки MS в другую. Элементы сериализации и десериализации в .NET Framework заботятся о транспортировке его по проводам, поэтому, когда вы возвращаете объект обратно в ваше приложение .NET на вызывающем конце, вы получаете переменную с именем Model с ожидаемым значением .

Если вы попытаетесь отправить весь класс, вы увидите много вложенных тегов XML, но когда вы получите объект в своем коде, вы увидите гражданина первого класса в иерархии объектов.

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

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