C # Silverlight WebClient получить ответ типа содержимого? - PullRequest
2 голосов
/ 10 августа 2009

Есть ли способ получить Content-Type ответа или наоборот установить Content-Type исходящего запроса в Silverlight с помощью WebClient?

Редактировать

Мне нужно сделать http-запросы и показать их прогресс. Я хочу упаковать механизм для выполнения запросов в общий модуль и использовать его повсюду в моем коде. Это я уже сделал. Сложность заключается в том, что при отправке различных типов данных на сервер в POST у меня нет возможности сообщить серверу, что это за данные (json, xml, form encode, binary)

Полагаю, что справиться с этим можно, передав запрос? Content-type = x и установив сервер так, чтобы он предпочитал его заголовку Content-Type.

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

Если у кого-то есть лучшее решение, пожалуйста, говорите:)

/ Edit

Вот мое затруднительное положение. Объекты HttpWebRequest / Response реализуют внутренний интерфейс, который позволяет отслеживать ход выполнения запроса. Если вы хотите выполнять большие запросы, очень важно, чтобы пользователь увидел индикатор выполнения, показывающий состояние загрузки / выгрузки.

Итак, использование HttpWebRequest / Response запрещено. Оставляя только WebClient, но я нахожу некоторые странные вещи об этом.

Он не может быть разделен на подклассы. На самом деле он не запечатан, но конструктор помечен [SecuritySafeCritical], что, насколько я могу судить, означает, что я не могу вызвать его из производного класса. По крайней мере, я потерпел неудачу и нашел в Google других, которые потерпели неудачу, но я был бы очень рад оказаться ошибочным в этом вопросе.

Внутренне он использует BrowserHttpWebResponse, который не переопределяет свойство абстрактных заголовков, и WebClient.ResponseHeaders просто пересылает в m_Response.Headers, который просто генерирует NotImplementedException.

Не уверен, что Content-Type будет даже в ResponseHeaders, но я бы хотел проверить.

Кажется, у нас неудачный выбор: информация о прогрессе или типе контента, но не оба в Silverlight.

Согласно документам, также нет способа установить Content-Type для исходящего запроса с помощью WebClient. Content-Type указан как ограниченный заголовок. Хотя я на самом деле не проверял это.

Хотя интересно отметить, что в случае ошибки вы фактически получаете объект ответа и имеете доступ к StatusCode, Content-Type и т. Д.

Ответы [ 3 ]

0 голосов
/ 07 октября 2009

Вы можете сделать это как this , если ваш сервер asp.net или как this , если это php. Это решения для загрузки, их можно изменить для прогресса загрузки, но не так просто.

Идея состоит в том, что они переписали серверный код, который выполняет загрузку, чтобы сохранить прогресс с идентификатором, а затем клиент опрашивает сервер, чтобы получить текущий прогресс.

0 голосов
/ 07 октября 2009

Более простое решение может состоять в том, чтобы код клиента / сервера разбивал загрузку / загрузку на куски и отправлял их по одному за раз. Затем вы можете обновлять свой индикатор выполнения после каждого чанка. Конечно, чем меньше размер вашего чанка, тем медленнее он будет идти.

Также: вы можете сообщить серверу, какой это тип контента, через аргумент строки запроса?

0 голосов
/ 11 августа 2009

Вы пытались использовать WebClient и событие DownloadProgressChanged на WebClient?

...