Доступ к исходному пакету HTTP-запроса в IHttpHandler

Я пытаюсь написать IHttpHandler, который может работать с запросом на потоковое мультимедиа, поступающим из проигрывателя Windows Media/Silverlight. Это означает ответ на необработанный HTTP-запрос, подобный этому (взято из документа протокола)

"GET /ms/contoso_100_files/0MM0.wmv HTTP/1.0"
"Accept: */*"
"User-Agent: NSPlayer/4.1.0.3925"
"Host: netshow.micro.com"
"Pragma: no-cache,rate=1.000000,stream-time=0,stream-offset=0:0,request-context=1,max-duration=0"
"Pragma: xClientGUID={2200AD50-2C39-46c0-AE0A-2CA76D8C766D}"

Когда я приземляюсь в методе ProcessRequest, коллекция context.Request.Headers, похоже, не предоставляет значения Pragma. Кроме того, он никогда не сможет этого сделать, так как есть две строки с одним и тем же ключом (Pragma)!

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

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

Я что-то упускаю?


person Skip Fields    schedule 07.04.2009    source источник


Ответы (2)


Тот факт, что заголовков Pragma нет, заставляет меня думать, что они, возможно, не отправляются. Я предлагаю вам использовать Fiddler для просмотра сетевого трафика, чтобы убедиться, что они отправляются вам.

person John Saunders    schedule 07.04.2009

Как вы получаете доступ к Request.Headers? NameValueCollection обрабатывает случаи нескольких заголовков, но для доступа к ним необходимо использовать правильные члены:

string[] values = context.Request.GetValues("Pragma");

(Свойство index по существу выполняет join(','...), где есть несколько значений).

person Richard    schedule 07.04.2009