如何使用.net 4 api端点从Request.Content对象获取原始请求正文

我正在尝试捕获原始请求数据以进行问责,并希望将请求正文内容从Request对象中提取出来。

我看过做Request.InputStream的建议,但这个方法在Request对象上不可用。

知道如何获取Request.Content体的字符串表示吗?

观察变量

您可以通过在Request.Content属性上调用ReadAsStringAsAsync来获取原始数据。

 string result = await Request.Content.ReadAsStringAsync(); 

如果您想要在一个字节或一个流中有各种重载。 由于这些是异步方法,因此您需要确保控制器是异步的:

 public async Task GetSomething() { var rawMessage = await Request.Content.ReadAsStringAsync(); // ... return Ok(); } 

在你对@ Kenneth的回答的评论中,你说ReadAsStringAsync()返回空字符串。

那是因为你(或类似于模型绑定器的东西)已经读取了内容,因此Request.Content中内部流的位置就在最后。

你能做的是:

 public static string RequestBody() { var bodyStream = new StreamReader(HttpContext.Current.Request.InputStream); bodyStream.BaseStream.Seek(0, SeekOrigin.Begin); var bodyText = bodyStream.ReadToEnd(); return bodyText; }