我正在尝试使用以下命令删除特定控制器操作的“X-Frame-Options”标题:
physicsBody
然而,这似乎根本不起作用。我可以在我的网站上使用它的唯一方法是将此代码添加到下面的global.asax中。我很确定我错过了ASP.NET MVC / IIS管道中的正确步骤,它允许我覆盖该头的IIS设置。这可能吗?
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Headers.Remove("X-Frame-Options");
base.OnResultExecuting(filterContext);
}
至于为什么我要这样做,我正在构建一个用户可以通过使用iframe在他们的个人网站上使用的小部件,但允许他们将信息发布到我们的网站。我意识到关闭此标题会产生安全隐患,虽然我欢迎任何关于如何减轻这些风险的建议,但我只是想知道我所要求的是否可行。
答案 0 :(得分:2)
OnResultExecuting 在MVC生命周期中发生得太早。标题尚未设置。
您需要的是 OnResultExecuted 方法,该方法在呈现视图后运行。
以下是您为所寻找的内容编写过滤器类的方法:
using System.Web.Mvc;
namespace Test.Filters
{
public class RemoveXFrameOptionsAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers.Remove("X-Frame-Options");
base.OnResultExecuted(filterContext);
}
}
}
然后使用它,装饰你想要应用此滤镜的控制器或动作。
[RemoveXFrameOptions]
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
或
public class TestController : Controller
{
[RemoveXFrameOptions]
public ActionResult Index()
{
return View();
}
}