Iframe 删除“;X-Frame-Options“;仅适用于特定控制器的标头

Iframe 删除“;X-Frame-Options“;仅适用于特定控制器的标头,iframe,asp.net-mvc-5,x-frame-options,Iframe,Asp.net Mvc 5,X Frame Options,我正在尝试使用以下方法删除特定控制器操作的“X-Frame-Options”标题: protected override void OnResultExecuting(ResultExecutingContext filterContext) { filterContext.HttpContext.Response.Headers.Remove("X-Frame-Options"); base.OnResultExecuting(filterContext); } 然而,这似乎

我正在尝试使用以下方法删除特定控制器操作的“X-Frame-Options”标题:

protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
    filterContext.HttpContext.Response.Headers.Remove("X-Frame-Options");
    base.OnResultExecuting(filterContext);
}
然而,这似乎根本不起作用。我能让它在我的网站上运行的唯一方法是将此代码添加到下面的global.asax。我很确定我在ASP.NET MVC/IIS管道中缺少正确的步骤,该步骤允许我覆盖该头的IIS设置。这可能吗

protected void Application_EndRequest()
{
    Response.Headers.Remove("X-Frame-Options");
}

至于我为什么要这么做,我正在构建一个小部件,用户可以通过使用iframe在他们的个人网站上使用,但允许他们将信息发布回我们的网站。我意识到关闭此标题会带来安全问题,虽然我欢迎任何关于如何减轻这些风险的建议,但我只想知道我所问的是否可行。

关于结果执行的问题在MVC生命周期中发生得太早了。标题尚未设置

您需要的是在渲染视图后运行的OnResultExecuted
方法

以下是如何为您要查找的内容编写筛选器类:

使用System.Web.Mvc;
名称空间测试.Filters
{
公共类RemovexFrameOptions属性:ActionFilterAttribute
{
公共覆盖无效OnResultExecuted(ResultExecutedContext筛选器上下文)
{
filterContext.HttpContext.Response.Headers.Remove(“X-Frame-Options”);
base.OnResultExecuted(filterContext);
}
}
}
然后,要使用它,请修饰您希望应用此过滤器的任何控制器或操作

[RemoveXFrameOptions]
公共类TestController:控制器
{
公共行动结果索引()
{
返回视图();
}
}

公共类TestController:Controller
{
[RemoveXFrameOptions]
公共行动结果索引()
{
返回视图();
}
}

我也尝试了同样的方法,但似乎没有效果。另外,在删除之前,对
filterContext.HttpContext.Response.Headers
进行了快速观察,但只显示了两个头
Server
X-AspNetMvc-Version
。有什么想法吗?我和sitecore一起试过,效果很好!