2009-04-07 4 views
0

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

"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. Это также спортивный аналогичный словарь, который, как я ожидаю, также не сможет принять два одинаковых значения прагмы без перезаписи другого.

Я что-то упустил?

ответ

0

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

0

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

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

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

+0

Спасибо, я просто попробовал это, и он работает: HttpWebRequest request = (HttpWebRequest) WebRequest.Create ("http: //localhost/whatever.html"); request.Headers.Add (HttpRequestHeader.Pragma, "Blah1"); request.Headers.Add (HttpRequestHeader.Pragma, "Blah2"); Что решает второй вопрос, Джон –

Смежные вопросы