Как удалить метатег с именем "Генератор", который Sitefinity генерирует по умолчанию, содержащий информацию о версии?

Я хочу удалить метатег <meta name="Generator" content="Sitefinity 9.1.6110.0 SE \"> для которого я уже реализовал решение, написав следующий фрагмент кода на главной странице.

 protected override void Render(HtmlTextWriter writer)
 {
   using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter()))
     {
       base.Render(htmlwriter);
       string html = htmlwriter.InnerWriter.ToString();
       html = html.Replace("<meta name=\"Generator\" content=\"Sitefinity 8.0.5710.0 PE\" />", "");
       writer.Write((html));
     }
}

Но кто-то предложил мне, что это не подходящее решение из-за рендеринга всей страницы в памяти, по умолчанию мастер-страница отображает всю страницу в виде строки, что приводит к снижению производительности. Если вы хотите удалить заголовки, вы можете сделать это на уровне объекта ASP.NET Page. Поэтому я хочу другое решение, как предложено, может кто-нибудь дать другое решение (эффективное решение)

2 ответа

Решение

Лучший способ сделать это - подписаться на событие IPagePreRenderCompleteEvent и удалить этот элемент управления. Пример кода global.asax

protected void Application_Start(object sender, EventArgs e)
{
        Telerik.Sitefinity.Abstractions.Bootstrapper.Initialized += Bootstrapper_Initialized;
}
protected void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs args)
{
        if (args.CommandName == "Bootstrapped") {
            EventHub.Subscribe<IPagePreRenderCompleteEvent>(this.OnPagePreRenderCompleteEventHandler);
        }
}
private void OnPagePreRenderCompleteEventHandler(IPagePreRenderCompleteEvent evt)
{
        if (!evt.PageSiteNode.IsBackend)
        {
            var controls = evt.Page.Header.Controls;
            System.Web.UI.Control generatorControl = null; 
            for(int i=0;i< evt.Page.Header.Controls.Count;i++)
            {
                var control = evt.Page.Header.Controls[i];
                if ((control is HtmlMeta) && (control as HtmlMeta).Name == "Generator") {
                    generatorControl = control;
                }
            }
            evt.Page.Header.Controls.Remove(generatorControl);
        }
 }

Кажется, вы можете переопределить ветку мета тегов версии SF System.Web.UI.Adapters.ControlAdapter Класс и добавить свою собственную логику для рендеринга мета-тегов. Смотрите последний пост.

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

Другие вопросы по тегам