在ASP.NET MVC2中实现拒绝背IE6访问
时间:2010-12-24 来源:卜俊生
这个“邪恶的IE6”,我实在是受够了他,嘿嘿(Google也是忍无可忍决定抛弃IE6),所以我也决定抛弃这个让人头疼不已的IE6,说做就做,谁让我是行动派的呢。
在ASP.NET MVC2中实现禁止被IE6访问其实非常简单,我们只要获取到客户端浏览器的IE版本,然后再判断这个版本号是不是6,如果是6那我们输出事先准备好的页面来提示用户,更换其他浏览器。
刚开始我想用HttpModule来实现,可是弄了半天没有弄明白,所以我决定放弃这个方案,改用ActionFilter来实现。(如果有高手知道怎么弄请不吝赐教)。
ActionFilter能够对Action进行过滤,在Actionfilter中我们可以实现禁止被IE6访问,但是大家都知道ActionFilter只能被应用到Controller级或Action级,并没有应用程序级的Filter,听说MVC3将支持应用程序级的Filter,不管是不是真的,先来看看在MVC2中如何实现。
首先我们需要自定义一个ActionFilter名字叫做CheckExplorerAttribute
public class CheckExplorerAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Browser.MajorVersion == 6)
{
ViewResult result=new ViewResult();
result.ViewName = "ExplorerError";
filterContext.Result = result;
}
}
}
这个ActionFilter在Action被执行前来判断客户端IE是否为IE6,如果是IE6则输出部分视图ExplorerError中的内容。
下面我们来看看ExplorerError中的内容。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<h3>致XXX网用户的一封信</h3>
<div>
<p>
亲爱的用户,当您看到这封信的时候,我们刚刚做出了一个非常艰难的决定。
</p>
<p>
在万恶的IE6停止对广大用户和网站开发者进行肆意蹂躏之前,我们决定拒绝使用IE6的用户访问我们的网站。
</p>
<p>
请您跟换成其他的浏览器,已获得更好的浏览效果,给你造成的不便我们深表遗憾!
</p>
<p>
最后我们送给广大用户一句忠告,“真爱生命,远离IE6”!
</p>
</div>
为了是这个Filter能够在整个应用程序中起作用我们需要自己定义一个Controller,这个Controller继承自系统的Controller,然后为这个Controller添加刚才自定义的Filter上,不说废话了,上代码。
[CheckExplorer]
public class MyController:Controller
{
}
最后我们创建的每个Controller都自称自这个MyController,这样用户不论访问那个页面都将看到我们自定义的那封信了,继续上代码。
public class HomeController : MyController
{
//
// GET: /Home/
public ActionResult Index()
{
return View();
}
}
OK,大功告成了,看效果图。