Есть ли способ получить Content-Type ответа или наоборот установить Content-Type исходящего запроса в Silverlight с помощью WebClient?
Edit
Мне нужно сделать 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, но мне бы хотелось проверить.
Похоже, у нас есть несчастливый выбор информации о ходе или информации Content-Type, но не в Silverlight.
Согласно документам, также нет способа установить Content-Type для исходящего запроса либо с помощью WebClient. Content-Type указан как ограниченный заголовок. Я действительно не проверял это, хотя.
Хотя интересно отметить, что при ошибке вы фактически передали объект ответа и получили доступ к StatusCode, Content-Type и т.д.
Более простым решением может быть, чтобы код клиент/сервер разбивал загрузку/загрузку на куски и отправлял их по одному. Затем вы можете обновить индикатор выполнения после каждого фрагмента. Конечно, чем меньше размер вашего куска, тем медленнее он будет идти.
Также: вы могли бы сообщить серверу, какой тип содержимого он является аргументом строки запроса?
Вы можете сделать это как this, если ваш сервер asp.net или как this, если это php. Это решения для загрузки, они могут быть изменены для загрузки, но не легко.
Идея состоит в том, что они переписали код сервера, который загружает, чтобы сохранить прогресс с идентификатором, а затем клиент опросит сервер, чтобы получить текущий прогресс.
Пробовали ли вы использовать WebClient и событие DownloadProgressChanged в WebClient?