本文详细介绍了几种异常处理的方法及其特点,包括使用局部try-catch-finally异常处理,控制器级异常处理,全局异常处理.
a.局部try-catch-finally异常处理
即直接在代码中使用try-catch语句
public ActionResult TestMethod()
{
try
{
//....
return View();
}
catch (Exception e)
{
//Handle Exception;
return View("Error");
}
finally
{
}
}
局限:无法在多个Action中重用异常处理逻辑.
b.控制器级异常处理
在控制器中重写的OnException方法,加入异常处理.
protected override void OnException(ExceptionContext filterContext)
{
Exception e = filterContext.Exception;
//Log Exception e
filterContext.ExceptionHandled = true;
//ajax request exception handling
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = Json(new { errorOccurred = true, errorMessage = e.Message, JsonRequestBehavior = JsonRequestBehavior.AllowGet });
}
else
{
filterContext.Result = View("Error");
}
}
优点:可以在同一控制器的不同Action中重用异常处理逻辑.如果在基类控制器重写该方法也可以实现全局的异常处理.
局限:不能在不同的控制器的Action中重用异常处理逻辑,需要一个基类控制器来解决它的重用问题.
c.全局异常处理
使用HandleErrorAttribute来处理异常.略.