Asp.net 帮助从HttpContext.InputStream读取JSON

Asp.net 帮助从HttpContext.InputStream读取JSON,asp.net,json,xmlhttprequest,httpmodule,inputstream,Asp.net,Json,Xmlhttprequest,Httpmodule,Inputstream,我创建了一个HttpModule来捕获用于审计目的的请求 对于对web方法的Ajax请求,我还希望记录与请求相关联的JSON数据 例如请求 POST/MyPage.aspx/AddRecord HTTP/1.1 x-request-with:XMLHttpRequest 接受语言:en gb 推荐人: 接受:application/json、text/javascript、/ 内容类型:application/json;字符集=utf-8 UA-CPU:x86 接受编码:gzip,放气 用户代理

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

对于对web方法的Ajax请求,我还希望记录与请求相关联的JSON数据

例如请求

POST/MyPage.aspx/AddRecord HTTP/1.1
x-request-with:XMLHttpRequest
接受语言:en gb
推荐人:
接受:application/json、text/javascript、/
内容类型:application/json;字符集=utf-8
UA-CPU:x86
接受编码:gzip,放气
用户代理: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”,“日期”:“8-6-2010”}

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

例1:

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

例2:

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

如何从HttpContext.InputStream成功提取数据


提前谢谢。

据我所知,这条流无法读取。您可以编写自己的处理程序,然后通过读写另一个流来缓冲流

要解析JSON部分,您可以尝试

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

我需要在读取之前重置流的位置

request.InputStream.Position=0
使用(StreamReader inputStream=新StreamReader(request.inputStream))
{
返回inputStream.ReadToEnd();
}