Как зарегистрировать запрос inputstream с HttpModule, затем сбросьте позицию InputStream

1 небольшое изменение: n-1 вместо n.

select *
from thetable
limit n-1, 1
31
задан kiamlaluno 9 July 2013 в 17:15
поделиться

3 ответа

Я решил проблему: я думаю, что вызов dispose в StreamReader должен убивать и InputStream.

Вместо использования StreamReader я сделал следующее:

        var bytes = new byte[request.InputStream.Length];
        request.InputStream.Read(bytes, 0, bytes.Length);
        request.InputStream.Position = 0;
        string content = Encoding.ASCII.GetString(bytes);

Итак полный код:

public class LoggingModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += ContextBeginRequest;
    }

    private void ContextBeginRequest(object sender, EventArgs e)
    {
        var request = ((HttpApplication)sender).Request;

        var bytes = new byte[request.InputStream.Length];
        request.InputStream.Read(bytes, 0, bytes.Length);
        request.InputStream.Position = 0;
        string content = Encoding.ASCII.GetString(bytes);

        LogRequest(content)
    }
}
40
ответ дан 27 November 2019 в 22:05
поделиться

Этот ответ не работал. Возвращает массив, который содержит нулевые значения.

        var bytes = new byte[request.InputStream.Length];
        request.InputStream.Read(bytes, 0, bytes.Length);
        request.InputStream.Position = 0;
        string content = Encoding.ASCII.GetString(bytes);

Потому что входной поток потребляется.
1
ответ дан 27 November 2019 в 22:05
поделиться

Необходимо использовать фильтр запросов . Напишите класс, производный от Stream , и зарегистрируйте его как фильтр.

1
ответ дан 27 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: