我需要获取原始请求字符串。以下是发送到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();
答案 0 :(得分:23)
此时,流已经被读取到最后。您需要先将InputStream的位置设置为开头,然后才能自己阅读。
Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();
答案 1 :(得分:0)
@ louis-ricci answear是正确的,但请记住,如果您在“操作方法”中使用[FromBody]
,则在调用Request.InputStream
时会出现异常,因为[FromBody]
已经读取为了通过调用HttpRequest.GetBufferlessInputStream()
序列化到模型来请求主体,该方法不能被调用两次。要解决此问题,只需不要使用 [FromBody]
,然后将原始请求字符串手动序列化到模型即可。
编辑:为了获得有关该主题的更好的上下文和搜索结果,抛出的错误消息如下:
This method or property is not supported after HttpRequest.GetBufferlessInputStream has been invoked