Использование HttpModules для изменения ответа, отправленного клиенту

#asp.net

#asp.net

Вопрос:

У меня есть два производственных веб-сайта с похожим контентом. Один из этих веб-сайтов должен быть проиндексирован поисковыми системами, а другой — нет. Есть ли способ добавить содержимое к ответу, предоставленному клиенту, используя HttpModule?

В моем случае мне нужен HttpModule для добавления к ответу, отправляемому, когда модуль активен в этой конкретной сети.

Ответ №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 amp;amp; page.Header != null)
    {
      page.Header.Controls.Add(new LiteralControl("<meta name="robots" value="noindex, follow" />"));
    }
  }
}
  

Другой способ сделать это — создать свою собственную Stream реализацию и применить ее через Response.Filters , но это, безусловно, сложнее.