在ASP.NET MVC中获取原始请求

时间:2012-10-02 18:58:10

标签: .net asp.net-mvc

我需要获取原始请求字符串。以下是发送到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();

2 个答案:

答案 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