如何删除 Sitefinity 默认生成的包含版本信息的名为 "Generator" 的元标记?
how to remove the meta tag named "Generator" which Sitefinity generates by default containing the version information?
我想删除元标记 <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));
}
}
但有人建议我这不是一个合适的解决方案,因为 In-memory 呈现整个页面,默认母版页将整个页面呈现为一个字符串,这会产生性能开销。如果你想删除headers,你可以这样做
在 ASP.NET 页 object 级别。所以我想要一个建议的其他解决方案,有人可以提供其他解决方案吗?(性能有效的解决方案)
每个 SF Version meta tag 论坛帖子似乎您可以覆盖 System.Web.UI.Adapters.ControlAdapter
class 并添加您自己的元标记呈现逻辑。见最后post.
如果这对您不起作用,您可以考虑缓存生成的页面,这样您就不需要再次替换和重新呈现相同的页面。
最好的方法是订阅 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);
}
}
我想删除元标记 <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));
}
}
但有人建议我这不是一个合适的解决方案,因为 In-memory 呈现整个页面,默认母版页将整个页面呈现为一个字符串,这会产生性能开销。如果你想删除headers,你可以这样做 在 ASP.NET 页 object 级别。所以我想要一个建议的其他解决方案,有人可以提供其他解决方案吗?(性能有效的解决方案)
每个 SF Version meta tag 论坛帖子似乎您可以覆盖 System.Web.UI.Adapters.ControlAdapter
class 并添加您自己的元标记呈现逻辑。见最后post.
如果这对您不起作用,您可以考虑缓存生成的页面,这样您就不需要再次替换和重新呈现相同的页面。
最好的方法是订阅 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);
}
}