2017-04-12 234 views
3

在我的WebAPI控制器之一,我倒要看看这是由客户端(如东西,你可以在http://web-sniffer.net/看到)发送的原生HTTP请求:C#的WebAPI - 获取完整的HTTP请求

POST/HTTP/1.1 
Host: www.some.host.tld 
Connection: keep-alive 
Accept-Encoding: gzip[CRLF] 
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7 
field1=FIELD1&field2=FIELD2 
Content-type: application/x-www-form-urlencoded 
[...] 

我该怎么做? RequestRequestContext都不包含这些数据,但我没有找到任何其他资源来查询此内容。

我试着在SO上搜索类似的问题,但只发现了Java的原始内容或(如果是完整的html)的问题。

在我的脑海里,我有一个关于这个与FilterConfig.cs相结合的小内存,但遗憾的是没有足够的具体内容。幸运的是,有人比我更懂得知道直接获取这些信息的方法。

编辑:

看来,这是不可能直接采集原始的HTTP请求。在阅读链接的答案之后,我似乎必须从几个字段重建请求。

据他回答杰夫的评论的链接,我必须重建从一堆解析领域的原始请求:为起始行

  • HttpContext.Current.Request.HttpMethod + .Url + .ServerVariables["SERVER_PROTOCOL"]
  • HttpContext.Current.Request.ServerVariables["ALL_RAW"]为标题
  • Request.Content.ReadAsStreamAsync().Result(不要忘记寻求读之前位置0)的内容
+0

这1行将解决您的问题var data = Request.Headers; –

+0

@DanEsparza你链接到的答案(14967457)不起作用。杰夫戴维斯在他的回答(1038466)中提出的答案使我走上了正确的轨道。请删除或编辑您的重复标记,以免读者在阅读本文时误导他人错误地回答(对我的问题)。 – MilConDoin

回答

0

安装并运行Telerik的提琴手。这捕获了流量,解码HTTPS流量。这是我为此目的而一直使用的。

+3

我认为OP想要一个代码解决方案。 – Luke

+1

在这种情况下,我想这个问题是这样的一个副本:http://stackoverflow.com/questions/1038466/logging-raw-http-request-response-in-asp-net-mvc-iis7 –