帮助从HttpContext.InputStream中读取JSON

时间:2010-08-12 09:10:15

标签: asp.net json xmlhttprequest httpmodule inputstream

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

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

请求

  

POST /MyPage.aspx/AddRecord HTTP / 1.1
  x-requested-with:XMLHttpRequest
  接受语言:en-gb
  推荐人:http://fiddlerlocal:5000/AddRecord.aspx
  接受:application / json,text / javascript, /
  Content-Type:application / json;字符集= UTF-8
  UA-CPU:x86
  Accept-Encoding:gzip,deflate
  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
  内容长度:287
  连接:保持活力
  Pragma:no-cache
  Cookie:.....
   { “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 - 编码一些如何?
     return Convert.ToBase64String(ms.ToArray()); - 什么都不做
     return Encoding.UTF8.GetString(ms.ToArray()); - 什么都不做
  }

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

提前致谢。

2 个答案:

答案 0 :(得分:21)

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

  

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

答案 1 :(得分:0)

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

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

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