2010-08-12 33 views
5

我创建了一个HttpModule来捕获审计目的请求。帮助从HttpContext.InputStream读取JSON

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

如请求

POST /MyPage.aspx/AddRecord HTTP/1.1
X-要求,具有:XMLHttpRequest的
接受语言:EN-GB
的Referer:http://fiddlerlocal:5000/AddRecord.aspx
接受:应用/ json,text/javascript,/
Content-Type:application/json;字符集= UTF-8
UA-CPU:86
接受编码:gzip,放气
的User-Agent: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
的Content-Length:287
连接:保持活动
附注: no-cache
Cookie:.....
{“id”:“282aa3b5-b55f-431c-916e-60433fdb61c0”,“date”:“8-6-2010”}

我已经尝试了各种方法来读取JSON({ “ID”: “2010年8月6日”: “282aa3b5-b55f-431C-916e-60433fdb61c0”, “日期”})从HttpContext.InputStream。

实施例1:

StreamReader的读者=新的StreamReader(request.InputStream);
string encodedString = reader.ReadToEnd(); - ReadToEnd的返回空字符串

实施例2:

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

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

在此先感谢。

回答

0

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

解析JSON一部分,你可以尝试

System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(string input); 
+0

非常感谢您的快速回复。 – blahblahblah 2010-08-12 14:21:16

21

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

request.InputStream.Position = 0; (StreamReader inputStream = new StreamReader(request.InputStream))

{
return inputStream.ReadToEnd();
}