如何使用.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; }