【问题标题】:C# WebAPI - Get full HTTP request [duplicate]C# WebAPI - 获取完整的 HTTP 请求 [重复]
【发布时间】:2017-09-08 05:45:26
【问题描述】:

在我的一个 WebAPI 控制器中,我想查看客户端发送的原始 HTTP 请求(就像您可以在 http://web-sniffer.net/ 上看到的内容):

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 上搜索类似的问题,但只找到有关原始内容或(如果是完整的 html)Java 的问题。

在我的脑海中,我对这方面的记忆与FilterConfig.cs 相结合,但遗憾的是没有足够具体的内容。幸运的是,比我知识渊博的人甚至知道直接获取这些信息的方法。

编辑:

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

根据 Jeff 在他的回答中的评论链接,我必须从一堆解析的字段中重建原始请求:

  • HttpContext.Current.Request.HttpMethod + .Url + .ServerVariables["SERVER_PROTOCOL"] 为起跑线。
  • HttpContext.Current.Request.ServerVariables["ALL_RAW"] 用于标题
  • Request.Content.ReadAsStreamAsync().Result(阅读前不要忘记寻找位置0)为内容

【问题讨论】:

  • 这 1 行将解决您的问题 var data = Request.Headers;
  • @DanEsparza 您链接到 (14967457) 的答案没有帮助。 Jeff Davies 在对他的回答 (1038466) 的评论中链接的答案让我走上了正确的道路。请删除或编辑您的重复标记,以免其他人在阅读本文时误入错误答案(我的问题)。

标签: c# asp.net-web-api


【解决方案1】:

安装并运行 Telerik Fiddler。这会捕获流量,解码 HTTPS 流量。这是我一直用于此目的的东西。

【讨论】:

猜你喜欢
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2013-10-02
  • 2013-04-06
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
相关资源
最近更新 更多