gpt4 book ai didi

asp.net-mvc - MVC5 : How do you override or change a header for a specific view?

转载 作者:行者123 更新时间:2023-12-04 01:57:47 24 4
gpt4 key购买 nike

默认情况下,我的站点启用了 x-frame-options: SAMEORIGIN header 。我想将其从特定 View 中删除,以仅允许该 View 托管在第 3 方 iFrame 中。

public ActionResult Callback1()
{
// Remove the anti-clickjacking setting
Response.Headers.Remove("X-Frame-Options");

Return View();
}
// Does not remove the header

public ActionResult Callback2()
{
// Try to override the setting
Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://foo.com"

Return View();
}
// Results in x-frame-options: ALLOW-FROM https://foo.com, SAMEORIGIN

如有任何帮助,我们将不胜感激。

最佳答案

如果您通过在 web.config 中的 system.webServer 元素下添加 customHeader 来启用 X-Frame-Options header ,则在您的操作方法中删除此 header 会成功工作。因为即使您的代码从响应中删除 header ,IIS 也会在将响应返回给浏览器之前将其添加回去。

一个解决方案是创建一个自定义 HttpModule,它检查 url 并从特定网页中删除此 header 。您可以将此模块注入(inject)请求管道。

另一个更简单的方法是从 web.config 中删除设置并启用在代码中添加 header 。您可以创建一个操作过滤器来执行此操作。

public class EnableSameOriginHeader : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
base.OnActionExecuted(filterContext);
}
}

对于您希望启用此 header 的所有这些操作方法,只需使用此过滤器对其进行装饰即可。

[EnableSameOriginHeader]
public ActionResult Users()
{
return View();
}

如果您不想启用此功能,请不要使用此过滤器进行修饰并在其中添加您的自定义 header 值。

public ActionResult SpecialView()
{
Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://foo.com";
return View();
}

关于asp.net-mvc - MVC5 : How do you override or change a header for a specific view?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34458610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com