2010-08-12 5 views
5

Я создал HttpModule для захвата запросов для целей аудита.Помочь чтению JSON из HttpContext.InputStream

Для запросов Ajax к веб-методу я также хотел бы записать данные JSON, связанные с запросом.

Например Запрос

POST /MyPage.aspx/AddRecord HTTP/1.1
х запрошенной-с: XMLHttpRequest
Accept-Language: EN-RU
Referer: http://fiddlerlocal:5000/AddRecord.aspx
Accept: приложения/json, text/javascript, /
Content-Type: application/json; кодировка = UTF-8
UA-CPU: x86
Accept-Encoding: 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
соединения: Keep-Alive
Pragma: нет кэша
Cookie: .....
{ "ID": "282aa3b5-b55f-431C Вет-916e-60433fdb61c0", "дата": "8-6-2010"}

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

Пример 1:

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

Пример 2:

использованием (MemoryStream мс = новое MemoryStream())
{
байт [] буфера = новый байт [request.ContentLength ];
request.InputStream.Read (buffer, 0, request.ContentLength);
ms.Write (буфер, 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

21

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

request.InputStream.Position = 0;
используя (StreamReader inputStream = новый StreamReader (request.InputStream))
{
return inputStream.ReadToEnd();

 Смежные вопросы

  • Нет связанных вопросов^_^