【问题标题】:Issues with running remote MVC app within local asp page在本地 asp 页面中运行远程 MVC 应用程序的问题
【发布时间】:2017-03-15 15:51:28
【问题描述】:

我有一个经典的 asp 网站和一个 MVC 网络应用程序。我将它们都作为本地主机托管在我的开发环境中。我还将它们都设置在远程服务器上。

以下是我的应用的 URL 列表:

  1. 本地托管的经典asp站点:http://localhost/AspAppName/
  2. 托管在远程服务器 (IIS) 上的经典 asp 站点:http://ServerName/AspAppName/
  3. 本地托管的 MVC Web 应用程序:http://localhost/MvcAppName/Dir/SubDir
  4. 托管在远程服务器 (IIS) 上的 MVC Web 应用程序:http://ServerName/MvcAppName/Dir/SubDir

我想要做的是让我的 MVC 应用程序在 iframe 中运行,该 iframe 放置在我的经典 asp 网站的一个页面上。

  • 当我在本地运行的经典 asp 站点的 iframe 中运行本地版本的 MVC 应用程序时,一切正常。在这种情况下,我使用“http://localhost/MvcAppName/Dir/SubDir”作为在 iframe 中执行的 URL,并且 iframe 位于“http://localhost/AspAppName/SomePage.asp
  • 当我在本地运行的经典 asp 站点的 iframe 中本地运行远程版本的 MVC 应用程序时,我收到以下错误:

"此内容不能在框架中显示。

为帮助保护您输入本网站的信息的安全性,此内容的发布者不允许将其显示在框架中”

在这种情况下,我使用“http://ServerName/MvcAppName/Dir/SubDir”作为在 iframe 中执行的 URL,并且 iframe 位于“http://localhost/AspAppName/SomePage.asp”上

错误显示在 IE 中。在 Firefox 和 Chrome 中,iframe 区域保持空白。

仅出于测试目的并查看这些是否是一些跨域限制/设置.在这种情况下,我看不到任何错误,并且本地 asp 站点显示 iframe 内容和远程托管的 asp 页面,没有任何问题。

这是我本地机器上 IIS 的一些应用程序池信息:

  • MvcAppName:.NET CLR 版本:v4.0,托管管道模式:集成;身份:ApplicationPoolIdentity
  • AspAppName:.NET CLR 版本:v2.0;托管管道模式:经典;身份:NetworkService (!, ?)

以下是来自远程服务器上 IIS 的一些应用程序池信息:

  • MvcAppName:.NET CLR 版本:v4.0,托管管道模式:集成;身份:ApplicationPoolIdentity
  • AspAppName:.NET CLR 版本:v2.0;托管管道模式:经典;身份:ApplicationPoolIdentity (!, ?)

对于将远程运行的 MVC 应用程序嵌套在本地运行的 asp 站点的 iframe 中可能导致问题的任何建议,我非常感谢。

【问题讨论】:

    标签: asp.net-mvc iis iframe asp-classic localhost


    【解决方案1】:

    听起来您需要从无法在 iframe 中显示的站点返回 X-Frame-Options 标头。此页面显示了可用选项以及如何在各种服务器(包括 IIS)中进行设置。

    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

    【讨论】:

    • 我在远程服务器上编辑了 C:\INETPUB\WWWROOT\MvcAppName\Web.Config 所以它的 system.webServer/httpProtocol/customHeaders 部分有“" 和 ""。然后我在 IIS 中重新启动站点并运行本地 asp 应用程序,但它的 iframe 仍然为“ServerName/MvcAppName/Dir/SubDir”返回相同的错误。
    • 同源意味着两个页面必须具有相同的组合方案、主机名和端口。如果我正确理解您的问题,我认为它们不匹配(localhost 与 ServerName)。您在 localhost 上的页面正在尝试在 iframe 中加载 ServerName 页面,对吗?在这种情况下,我会尝试让 ServerName 页面返回 X-Frame-Options: ALLOW-FROM http://localhost/X-Frame-Options: ALLOWALL
    • 我的错误@Kevin,感谢您纠正我的错误。无论如何...我尝试了“ALLOWALL”、“ALLOW-FROM ht tp://localhost/”、“ALLOW-FROM ht tp://localhost”、“ALLOW-FROM ht tp://localhost:80/”、 “允许-来自 ht tp://localhost:80”。不幸的是,这些组合都不起作用。
    • 嗯。您已验证标头实际上是在对框架页面的请求中出现的?
    • 您可以使用 Chrome 开发者工具。查看网络选项卡,单击 iframed 文档的请求,然后查看响应标题。
    【解决方案2】:

    原来 X-Frame-Options 设置被自动覆盖。要关闭它,我必须将以下行添加到 Global.asax.cs 中的 Application_Start。

    AntiForgeryConfig.SuppressXFrameOptionsHeader = true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多