2009-08-10 1 views
2

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

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

мне нужно делать запросы 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

Что вы пытаетесь достичь? Какова ваша конечная цель? Вы объяснили, какие методы вы пробовали, но вы не объяснили, что вы пытаетесь сделать. –

ответ

0

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

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

+0

На самом деле я действительно отступил на такую ​​стратегию, и это вроде как работа. – Eloff

0

Вы пробовали с помощью WebClient и событие DownloadProgressChanged на WebClient ?

+0

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

0

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

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