正如我在主题中已经提到的,我有一个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网站的内容和位置?
答案 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
标头。
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部分。