24

我需要获取原始请求字符串。下面是发送到 Controller 的 http 请求示例。实际上,我需要发布数据(最后一行)。我怎么能得到那个?

请注意,我不想使用自动 JSON 模型绑定器。实际上,我需要原始 JSON 文本

POST http://www.anUrl.com/CustomExport/Unscheduled HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://www.anUrl.com/CustomExport
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: localhost:8000
Content-Length: 102
Connection: Keep-Alive
Pragma: no-cache

{"runId":"1","fileDate":"8/20/2012","orderStartMinDate":"10/02/2012","orderStartMaxDate":"10/02/2012"}

最后一行是我需要的。这个进不去

var input = new StreamReader(Request.InputStream).ReadToEnd();
4

2 回答 2

29

那时,流已经被读到最后。您需要将 InputStream 的位置设置回开头,然后才能自己阅读。

Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();
于 2012-10-02T19:06:35.677 回答
0

@louis-ricci answear 是正确的,但请记住,如果您[FromBody]在 Action Method 中使用,调用时会出现异常Request.InputStream,因为[FromBody]已经读取了请求正文以便通过调用序列化到模型HttpRequest.GetBufferlessInputStream(),并且此方法可以' t 被调用两次。要解决这个问题,只需不要 [FromBody]在您的请求中使用并将原始请求字符串手动序列化到您的模型。

编辑:为了更好地了解该主题的上下文和搜索结果,抛出的错误包含以下消息:

This method or property is not supported after HttpRequest.GetBufferlessInputStream has been invoked
于 2018-10-25T17:22:29.303 回答