【发布时间】: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
[...]
我该怎么做? Request 和 RequestContext 都不包含此数据,我也没有找到任何其他资源来查询此内容。
我尝试在 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