2017-04-12 231 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 –