捕获异常
1.在Asp.net MVC中提供了一个全局的异常处理的过滤器:HandleErrorAttribute,可以通过该过滤器捕获异常信息。
2.需要在Global文件中调用的RegisterGlobalFilters方法中完成自己定义异常处理过滤的注册。
MyExceptionAttribute.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Mvc;
namespace CZBK.ItcastOA.WebApp.Models
{
public class MyExceptionAttribute : HandleErrorAttribute //继承HandleErrorAttribute类
{
public static Queue<Exception> ExceptionQueue = new Queue<Exception>();
// 可以捕获异常数据
public override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
Exception ex = filterContext.Exception; //捕获异常
//将异常写到队列
ExceptionQueue.Enqueue(ex);
//跳转到错误页面.
filterContext.HttpContext.Response.Redirect("/Error.html");
}
}
}
D:\MyWeb.WebApp\App_Start\FilterConfig.cs:
using MyWeb.WebApp.Models;
using System.Web;
using System.Web.Mvc;
namespace MyWeb.WebApp
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//filters.Add(new HandleErrorAttribute());
filters.Add(new MyExceptionAttribute()); //注册异常处理的过滤器
}
}
}
Global.asax.cs(系统默认注册了过滤器,该文件一般不用再修改):
using MyWeb.WebApp.Models;
using log4net;
using Spring.Web.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace MyWeb.WebApp
{
public class MvcApplication : SpringMvcApplication //System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); //过滤器配置注册。
}
}
}