Как я могу получить текст ответа веб-страницы через модуль IIS? - PullRequest
2 голосов
/ 15 августа 2011

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

Как я могу прочитать поток данных, отправляемых обратно в браузер, в строку, чтобы я мог преобразовывать ключевые слова по мере необходимости?

Любая помощь будет принята с благодарностью!

Вот код:

namespace MyNamespace
{
    class MyModule : IHttpModule
    {
        private HttpContext _current = null;

        #region IHttpModule Members

        public void Dispose()
        {
            throw new Exception("Not implemented");
        }

        public void Init(HttpApplication context)
        {
            _current = context.Context;

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

        #endregion

        public void context_PreRequestHandlerExecute(Object source, EventArgs e)
        {
            HttpApplication app = (HttpApplication)source;
            HttpRequest request = app.Context.Request;
        }
}

1 Ответ

1 голос
/ 29 августа 2011

Существует два способа:

  1. Использование фильтров ответа

http://www.4guysfromrolla.com/articles/120308-1.aspx

  1. Обработка события PreRequestHandlerExecuteприложения в том виде, в котором оно запущено непосредственно перед тем, как IHttpHandler обработает саму страницу:

    public class NoIndexHttpModule : IHttpModule
    {
      public void Dispose() { }
    
      public void Init(HttpApplication context)
      {
        context.PreRequestHandlerExecute += AttachNoIndexMeta;
      }
    
      private void AttachNoIndexMeta(object sender, EventArgs e)
      {
        var page = HttpContext.Current.CurrentHandler as Page;
        if (page != null && page.Header != null)
        {
          page.Header.Controls.Add(new LiteralControl("<meta name=\"robots\" value=\"noindex, follow\" />"));
        }
      }
    

    }

...