Как удалить метатег с именем "Генератор", который 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
Класс и добавить свою собственную логику для рендеринга мета-тегов. Смотрите последний пост.
Если это не сработало для вас, вы могли бы рассмотреть кэширование сгенерированной страницы, поэтому вам не нужно заменять и повторно визуализировать ту же страницу снова.