允许来自不同域的帧与MVC5

时间:2016-02-05 14:17:14

标签: c# asp.net-mvc asp.net-mvc-5 http-headers x-frame-options

我正在尝试使用MVC5将谷歌地图加载到iframe中,但我被错误阻止了

  

拒绝在一个框架中显示“https://www.google.com/maps?cid=XXXXX”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。

经过多次搜索,我尝试了以下内容:

  • AntiForgeryConfig.SuppressXFrameOptionsHeader = true;添加到global.ascx中的Application_Start

  • 创建属性(使用和不使用global.ascx中的设置尝试过此操作):

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext != null)
        {
            filterContext.HttpContext.Response.Headers["X-Frame-Options"] = "ALLOW-FROM https://www.google.com";
            base.OnActionExecuted(filterContext);
        }
    }
    
  • 尝试使用属性OnResultExecuted(ResultExecutedContext filterContext)代替OnActionExecuted

  • 在web.config中删除它:

    <httpProtocol>
        <customHeaders>
            <remove name="X-Frame-Options" />
        </customHeaders>
    </httpProtocol>
    

有什么我想念的吗?如何摆脱这个http标头(或至少改变它以允许地图)?

更新

我刚检查了发送的标头,它们是正确的,因为它们要么

  

X-Frame-Options:ALLOW-FROM https://www.google.com

如果删除属性但保留global.ascx更新

,或者根本不存在

然而,当我运行页面并看到这些标题时,它仍然给我SAMEORIGIN错误。

1 个答案:

答案 0 :(得分:1)

事实证明,我完全是愚蠢的,并且误解了x-frame-options的工作原理。这是为了阻止您的网站页面通过iframe显示在其他网站上。

因此,我为SAMEORIGIN获取的x-frame-options http标头实际上来自谷歌。我认为,当网址从他们的地方返回api我可以使用它,但显然你只能链接到它。

创建一个新的地图api密钥并启用地图嵌入api,我可以使用place_id,并将以下网址调用到iframe中:

std::cout

如果没有我获得标题(或者对我的标题执行任何额外操作),这将显示。

我会把这个留在这里以防万一有人像我一样愚蠢