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

Yur*_*pka 2 asp.net-mvc iframe asp.net-mvc-4

正如我在主题中已经提到的,我有一个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>
Run Code Online (Sandbox Code Playgroud)

那么在MVC网站中我必须写什么以及在哪里实现呢?

ram*_*ilu 5

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

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

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


Yur*_*pka 5

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

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

1. 配置IIS以将此属性添加到所有HTTP响应

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

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

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

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)


Ech*_*lon 5

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

<system.webServer>
  ...
  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>
  ...
</system.webServer>
Run Code Online (Sandbox Code Playgroud)