Получение HTML сгенерировано с ASP.NET

В java объекты генерируются в кучевой памяти. Для этого требуется, чтобы ссылка была указана и использована в нашем приложении. Ссылка имеет расположение памяти объекта, с помощью которого мы можем использовать объекты в нашем приложении. Ссылка вкратце - это не что иное, как имя переменной, в которой хранится адрес объекта, созданного в ячейке памяти.

instance - общий термин для object. FYI, Object является классом.

Например,

Class A{

}

A ref = new A();

Для приведенного выше фрагмента кода ref является ссылкой для объекта класса A, сгенерированного в куче.

18
задан lastas 22 December 2008 в 16:05
поделиться

3 ответа

Хороший вопрос, я должен был испытать и видеть, мог ли я создать HttpModule, чтобы сделать то, что Вы описываете.

у меня не было удачи при попытке читать из responsestream, но использование ResponseFilter дало мне способ получить содержание.

следующий код, кажется, работает довольно хороший, и я фигурировал, возможно, что Вы могли использовать код как основу. Но помните, что это - просто что-то, что я бросил вместе быстро, это не было протестировано всегда. Не используйте его ни в какой продуктивной среде без надлежащего рассмотрения/тестирования и такого. Не стесняйтесь комментировать его хотя ;)

public class ResponseLoggerModule : IHttpModule
{
    private class ResponseCaptureStream : Stream
    {
        private readonly Stream _streamToCapture;
        private readonly Encoding _responseEncoding;

        private string _streamContent;
        public string StreamContent
        {
            get { return _streamContent; }
            private set
            {
                _streamContent = value;
            }
        }

        public ResponseCaptureStream(Stream streamToCapture, Encoding responseEncoding)
        {
            _responseEncoding = responseEncoding;
            _streamToCapture = streamToCapture;

        }

        public override bool CanRead
        {
            get { return _streamToCapture.CanRead; }
        }

        public override bool CanSeek
        {
            get { return _streamToCapture.CanSeek; }
        }

        public override bool CanWrite
        {
            get { return _streamToCapture.CanWrite; }
        }

        public override void Flush()
        {
            _streamToCapture.Flush();
        }

        public override long Length
        {
            get { return _streamToCapture.Length; }
        }

        public override long Position
        {
            get
            {
                return _streamToCapture.Position;
            }
            set
            {
                _streamToCapture.Position = value;
            }
        }

        public override int Read(byte[] buffer, int offset, int count)
        {
            return _streamToCapture.Read(buffer, offset, count);
        }

        public override long Seek(long offset, SeekOrigin origin)
        {
            return _streamToCapture.Seek(offset, origin);
        }

        public override void SetLength(long value)
        {
            _streamToCapture.SetLength(value);
        }

        public override void Write(byte[] buffer, int offset, int count)
        {
            _streamContent += _responseEncoding.GetString(buffer);
            _streamToCapture.Write(buffer, offset, count);
        }

        public override void Close()
        {
            _streamToCapture.Close();
            base.Close();
        }
    }

    #region IHttpModule Members

    private HttpApplication _context;
    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {
        _context = context;

        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
        context.PreSendRequestContent += new EventHandler(context_PreSendRequestContent);
    }

    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        _context.Response.Filter = new ResponseCaptureStream(_context.Response.Filter, _context.Response.ContentEncoding);
    }

    void context_PreSendRequestContent(object sender, EventArgs e)
    {
        ResponseCaptureStream filter = _context.Response.Filter as ResponseCaptureStream;

        if (filter != null)
        {
            string responseText = filter.StreamContent;

            // Logging logic here
        }
    }

    #endregion
}
25
ответ дан 30 November 2019 в 08:04
поделиться

Один путь к сделать серверную сторону XMLHTTP запрашивает к Вашему собственному серверу. Захватите результат и сохраните его в файл или DB.

Поочередно можно использовать Ajax на клиенте, захватить результат и POST он назад к серверу.

1
ответ дан 30 November 2019 в 08:04
поделиться

Многие тестеры загрузки позволят Вам регистрировать сгенерированные ответы HTTP, но принимать во внимание с ASP.NET это могли быть некоторые очень большие файлы журнала.

Редактирование: Ответ. Фильтр согласно коду Tom Jelen разработан для предоставления этого вида контроля и Ответа. Outputstream в других отношениях нечитабелен.

Редактирование 2: Для страницы, а не HTTPModule

public class ObserverStream : Stream
{
  private byte[] buffer = null;
  private Stream observed = null;

  public ObserverStream (Stream s)
  {
    this.observed = s;
  }

  /* important method to extend #1 : capturing the data */
  public override void Write(byte[] buffer, int offset, int count)
  {
    this.observed.Write(buffer, offset, count);
    this.buffer = buffer; //captured!
  }

  /* important method to extend #2 : doing something with the data */
  public override void Close()
  {
    //this.buffer available for logging here!
    this.observed.Close();
  }

  /* override all the other Stream methods/props with this.observed.method() */

  //...

}

и в Вашем Page_Load (или прежде чем Ваш ответ записан так или иначе)

Response.Filter = new ObserverStream(Response.Filter);
4
ответ дан 30 November 2019 в 08:04
поделиться
Другие вопросы по тегам:

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