帮助从HttpContext.InputStream中读取JSON

我创建了一个HttpModule来捕获审计目的请求。

对于Web方法的Ajax请求,我想也记录与请求关联的JSON数据。

例如请求

POST /MyPage.aspx/AddRecord HTTP / 1.1
x-requested-with:XMLHttpRequest
Accept-Language:en-gb
Referer:http:// fiddlerlocal:5000 / AddRecord.aspx
接受:application / json,text / javascript,/
Content-Type:application / json; 字符集= utf-8的
UA-CPU:x86
Accept-Encoding:gzip,deflate
用户代理:Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5。 30729)
主持人:fiddlerlocal:5000
内容长度:287
连接:保持活跃
Pragma:无缓存
曲奇饼: .....
{ “ID”: “282aa3b5-b55f-431C-916e-60433fdb61c0”, “日期”: “2010年8月6日”}

我尝试了多种方法从HttpContext.InputStream中读取JSON({“id”:“282aa3b5-b55f-431c-916e-60433fdb61c0”,“date”:“8-6-2010”})。

例1:

StreamReader reader = new StreamReader(request.InputStream);
string encodedString = reader.ReadToEnd(); - ReadToEnd返回一个空字符串

例2:

使用(MemoryStream ms = new MemoryStream())
{
byte [] buffer = new byte [request.ContentLength];
request.InputStream.Read(buffer,0,request.ContentLength);
ms.Write(buffer,0,request.ContentLength); - 字节数组包含正确的字节数,但每个字节的值都是0 - 编码如何?
返回Convert.ToBase64String(ms.ToArray()); - 什么都不做
返回Encoding.UTF8.GetString(ms.ToArray()); - 什么都不做
}

我怎样才能成功地从HttpContext.InputStream中提取数据?

提前致谢。


在阅读之前,我需要重设流的位置...

request.InputStream.Position = 0;
使用(StreamReader inputStream = new StreamReader(request.InputStream))
{
return inputStream.ReadToEnd();
}


据我所知,该流不能被读取。 你可以写你自己的处理程序,然后通过读取和写入另一个流来缓冲流。

解析JSON部分,你可以尝试

System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(string input);
链接地址: http://www.djcxy.com/p/43781.html

上一篇: Help reading JSON from HttpContext.InputStream

下一篇: How to dispose IHttpModule correctly?