Silverlight 4 WebClient, невозможно установить HttpRequestHeader.ContentType в application / json - PullRequest
1 голос
/ 03 января 2011

Я слишком долго боролся с этим, поэтому решил опубликовать вопрос.

У меня есть сайт MVC 3 RC2, на котором размещена конечная точка нулевой конфигурации WCF, сам сайт и приложение SL 4. Когда приложение SL использует объект WeClient для извлечения данных из конечной точки, данные возвращаются в формате xml (по умолчанию, если не указано иное). Когда я пытаюсь изменить заголовки с помощью этого фрагмента

        var client = new WebClient();
        var uri = new Uri("http://example.com/Services/GetFoodDescriptionsLookup(2100)");


        // A WebClient instance does not send optional HTTP headers by default. 
        // If your request requires an optional header, 
        // you must add the header to the Headers collection.

        // http://msdn.microsoft.com/en-us/library/system.net.webheadercollection.aspx

        // WRONG
        client.Headers[HttpRequestHeader.ContentType] = "application/json";

        // RIGHT
        client.Headers[HttpRequestHeader.Accept] = "application/json";

        client.DownloadProgressChanged += (o, e) =>
            {
                Status = String.Format("BytesReceived : {0}", e.BytesReceived);
            };

        client.DownloadStringCompleted += (o, e) =>
            {
                Status = "Downloading...Done.";
                Result = e.Result;
            };

        client.DownloadStringAsync(uri);

Я получаю «Операция недействительна из-за текущего состояния объекта». , если я удаляю его, вызов завершается успешно, но возвращается как xml.

Суть моего вопроса такова: «Как изменить тип содержимого на application / json, чтобы служба wcf могла возвращать JSON»? Конечная точка работает так, как я могу использовать jQuery для поиска нужного формата в веб-браузере.

Спасибо, Стивен

EDIT

С тех пор я узнал от Блока Гленна, что все делал неправильно, как в этом примере, так и в этом с классом HttpWebRequest Как использовать метод GttpWebRequest с ContentType = "application / json " Тип содержимого используется для указания того, что вы планируете отправлять на сервер, примите то, что вы ожидаете получить обратно.

1 Ответ

2 голосов
/ 03 января 2011

Используйте WebRequest вместо WebClient.

WebRequest имеет свойство ContentType, которое можно использовать для установки типа контента.

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