如何在IFrame中禁用打开的ASP.NET MVC站点?

时间:2014-01-21 12:27:48

标签: asp.net-mvc asp.net-mvc-4 iframe

正如我在主题中已经提到的,我有一个MVC网站,我需要禁用将其加载到IFrame中。

我创建了一个简单的页面用于测试目的,我尝试加载到我的网站和Google.com的两个IFrame中。我可以看到我的网站已加载但谷歌不是。这意味着我必须在我的MVC网站中更改某些内容。

<!DOCTYPE html>
<html>
<body>

<iframe src="http://localhost:61831/" width="1200" height="800">
  <p>Your browser does not support iframes.</p>
</iframe>

<iframe src="http://google.com" width="1200" height="800">
  <p>Your browser does not support iframes.</p>
</iframe>

</body>
</html>

那么为了达到这个目的,我必须编写MVC网站的内容和位置?

5 个答案:

答案 0 :(得分:5)

简单快捷的解决方案是在Global.asax中添加以下内容 -

protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
    Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
}

然后试试iframe。页面无法在iframe中打开。 HTH。

答案 1 :(得分:5)

可以使用X-Frame-Options HTTP标头属性来避免在IFrame中打开ASP.NET MVC应用程序。

将此属性插入HTTP标头有几种不同的方法:

1. Configure IIS将此属性添加到所有HTTP响应

2.在每个控制器的每个必要的操作方法中设置此属性

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
            return View();
        }
    }

3.以描述here的方式创建C#属性并将其应用于操作方法和控制器

    [HttpHeader("X-Frame-Options", "SAMEORIGIN")]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
        }
    }

4.在Global.asax文件

中设置此属性
public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        ...
    }

    protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
    {
        Response.AppendHeader("X-Frame-Options", "SAMEORIGIN");
    }
}

答案 2 :(得分:3)

您还可以在web.config中添加条目:

<system.webServer>
  ...
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>
  ...
</system.webServer>

答案 3 :(得分:0)

您可以将IIS配置为始终在其响应中附加X-Frame-Options SAMEORIGIN标头。

  • 从IIS管理控制台中,选择您的应用程序。
  • 在主面板中,双击“Http Response Headers”。
  • 点击右上方窗格中的添加。
  • 然后将名称设置为X-Frame-Options,将值设置为SAMEORIGIN 单击“确定”。

这可能会阻止您的网站加载到其他主机上的iframe ,而不使用任何javascript或任何额外的代码

有关标题文档,请参阅developper.mozilla.org,有关IIS'配置,请参阅technet.microsoft.com

答案 4 :(得分:0)

正如DrewMan建议的那样,你想要使用X-Frame-Options标题。

我建议你下载Nuget Package NWebsec以及MVC specific package。另请查看configuration部分。