在IHttpHandler中访问原始HTTP请求数据包

时间:2009-04-07 10:48:42

标签: .net ihttphandler

我正在尝试编写一个IHttpHandler,它可以处理来自Windows Media Player / 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类型的辅助请求。这也是一个类似的字典,我希望它也不能接受两个相同的pragma值而不会覆盖另一个。

我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

没有 Pragma标头的事实让我觉得它们可能没有被发送。我建议您使用Fiddler观看网络流量,以确保它们被发送给您。

答案 1 :(得分:0)

您如何访问Request.HeadersNameValueCollection处理多个标题的情况,但您必须使用正确的成员来访问它们:

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

(index属性基本上执行join(','...),其中有多个值。)