C # Silverlight WebClient получить ответ типа содержимого?

2

Есть ли способ получить 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 и т.д.

  • 0
    Что вы пытаетесь достичь? Какова ваша конечная цель? Вы объяснили, какие методы вы пробовали, но не объяснили, что вы пытаетесь сделать.
Теги:
silverlight
webclient

3 ответа

0
Лучший ответ

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

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

  • 0
    На самом деле, я использовал такую стратегию, и она действительно работает.
0

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

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

0

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

  • 0
    Да, как я уже говорил выше, похоже, это единственный способ получить информацию о ходе загрузки. Но тогда проблема в том, что в WebClient есть интерфейс для манекенов, который не предоставляет ничего более продвинутого (например, Content-Type), поэтому, если вам нужен прогресс и расширенные функции, у вас действительно есть ноль опций.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню