Помогите прочитать JSON из HttpContext.InputStream

Я создал HttpModule для захвата запросов в целях аудита.

Для запросов 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 : приложение/json; charset=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
Соединение: Сохранить -Alive
Прагма: no-cache
Cookie: .....
{"id":"282aa3b5-b55f-431c-916e-60433fdb61c0","date":"8- 6-2010"

Я пробовал различные методы чтения JSON ({"id":"282aa3b5-b55f-431c-916e-60433fdb61c0","date":"8-6-2010"}) из HttpContext.InputStream.

Пример 1:

Читатель StreamReader = новый StreamReader(request.InputStream);
string encodedString = reader.ReadToEnd(); -- ReadToEnd возвращает пустую строку

Пример 2:

using (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?

Заранее спасибо.


person blahblahblah    schedule 12.08.2010    source источник


Ответы (2)


Мне нужно было сбросить позицию потока перед чтением...

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

person blahblahblah    schedule 12.08.2010

Поток не может быть прочитан, насколько я знаю. Вы можете написать свой собственный обработчик, а затем буферизовать поток, читая и записывая в другой поток.

Чтобы проанализировать часть JSON, вы можете попробовать

System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(string input);
person Yves M.    schedule 12.08.2010