【问题标题】:Load denied by X-Frame-Options: "http://test.test.net/Feedback/Create?appId=TestApp" does not permit cross-origin framing using MVC5X-Frame-Options 拒绝加载:“http://test.test.net/Feedback/Create?appId=TestApp”不允许使用 MVC5 进行跨域框架
【发布时间】:2014-01-20 02:58:00
【问题描述】:

我正在开发一个托管在我公司网络上且只能从网络内访问的网站,因此我不关心跨域请求。

无论如何,我正在处理的这个特定网站在导航栏中添加了一个“提供反馈”链接。这个“提供反馈”链接打开一个 jQuery 模式对话框,在这个对话框中是一个 iframe,它从一个 URL 加载,该 URL 的服务器与该特定网站所在的服务器不同,因此我得到了错误。

MVC4 运行良好,没有这样的问题,只有当我升级到 MVC5 时。 MVC5 有一些不同之处,它可以防止将内容加载到框架中。

我已阅读有关将 X-Frame 选项设置为“ALLOWFROM”的信息 - 但这是否意味着我需要在 iframe 中加载的应用程序 URL 或调用应用程序(具有此链接的网站在导航栏中)?我还要补充一点,这个问题只有在我将应该在iframe 中加载的应用程序从 MVC4/WebAPI 升级到 MVC5/WebAPI 版本 2 时才出现。使用以前的 MVC 版本我对此没有任何问题。我该如何解决这个问题?

Firebug 的大版本:

这是我在应用程序中的客户端代码,其中包含“提供反馈”的代码:

$(document).ready(function () {
            $('body').append("<div id='dialog-modal'><iframe width='900' height='420' src='http://blah.blah.net/ApplicationName/AppFeedback/Create?appId=TestApp'></iframe></div>");
            $("#dialog-modal").dialog({
                buttons: {
                    "Close": function () {
                        $(this).dialog("close");
                    }
                },
                title: "Provide Feedback!",
                autoOpen: false,
                height: 560,
                width: 940,
                modal: true,
                overlay: {
                    backgroundColor: "#000000",
                    opacity: 0.75
                },
                resizable: true,
                open: function () {
                    $('.ui-widget-overlay').bind('click', function () {
                        $('#dialog-modal').dialog('close');
                    })
                }
            });

            $("a.feedback").live("click", function (event) {
                event.preventDefault();
                $("#dialog-modal").dialog("open");
            });

【问题讨论】:

    标签: javascript jquery asp.net-mvc-4 iframe asp.net-web-api


    【解决方案1】:

    您应该在包含在 iframe 中的应用程序上设置此响应标头。

    【讨论】:

    • 我一直在寻找似乎无处不在的关于如何在 MVC 应用程序上设置自定义标头但找不到设置它的位置。我在控制器中设置吗?原谅我的无知...
    【解决方案2】:

    将其放入 Global.asax 对我有用:

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        HttpContext.Current.Response.Headers.Remove("X-Frame-Options");
    }
    

    显然 MVC4 和 MVC5 之间存在差异,它在 MVC4 中工作,但在 MVC5 中没有,这是我正在使用的。

    【讨论】:

    • 达林的回答基本上是正确的,但这最终对我有用。
    猜你喜欢
    • 2014-11-14
    • 1970-01-01
    • 2013-02-22
    • 2018-01-01
    • 2015-07-20
    • 2015-06-04
    • 1970-01-01
    • 2018-07-17
    • 2013-12-21
    相关资源
    最近更新 更多