如果需要将自定义的异常过滤器应用到所有的controller的action上,那么需要将该自定义异常过滤器注册到全局,代码如下:
using Blog20180413.Filters;
using System.Web;
using System.Web.Mvc;
namespace Blog20180413
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomExceptionFilterAttribute());
}
}
}
2、通过在Global.asax 中定义Application_Error方法 实现异常处理和自定义错误页
上面提到的 自定义异常过滤器只能捕获在执行action方法过程中抛出的异常(即使注册为全局过滤器也只能捕获action方法执行过程中抛出的异常),如果需要捕获更高级别的异常,也就是在请求执行过程中出现的任何异常(如在控制器的构造函数中抛出异常),那么可以使用该种方式,代码如下:
using log4net;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Blog20180413
{
public class MvcApplication : System.Web.HttpApplication
{
static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication));
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
XmlConfigurator.ConfigureAndWatch(new FileInfo(Server.MapPath("~/web.config")));
}
protected void Application_Error(object sender, EventArgs e)
{
Exception exception = Server.GetLastError();
//Server.ClearError();
//这里记录错误日志信息
log.Error("MvcApplication 捕获异常", exception);
//跳转到指定的自定义错误页
Response.Redirect("/CustomErrorHandle/CustomErrorPage");
}
}
}
3、通过配置system.web->customErrors节点 实现自定义错误页
当你的站点发生异常时,如果你只是想简单的跳转到一个自定义错误页面,而不是对异常进一步处理时,那么你可以简单的作如下配置操作即可:
需要在web.config中做如下配置:
<system.web> <customErrors mode="On" defaultRedirect="CustomErrorPage"> </customErrors> </system.web>
注意:这里的CustomErrorPage是一个视图文件,放在Shared共享目录下。
如果你注册了HandleErrorAttribute异常过滤器到全局,那么在你的错误页中将能获取到和异常相关的一些信息。但此时配置到defaultRedirect的值的必须是Error
也就是自定义错误视图页面的名称必须为Error.cshtml,并且放在Shared目录,当然,你也可以通过在创建HandleErrorAttribute全局过滤器的过程中,设置器View属性,这样你就可以不用讲错误视图的名称设置为Error了.如下:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
HandleErrorAttribute errorAttribute = new HandleErrorAttribute();
errorAttribute.View = "CustomErrorPage";
filters.Add(errorAttribute);
}








