我正在开发一个 ASP.NET MVC 应用程序,我需要在其中捕获业务逻辑类中的错误并重定向到错误控制器。我需要捕获这两个错误,这些错误与我的业务逻辑有关,而其他错误则是应用程序异常。如果我从业务逻辑中抛出异常,如何在当前控制器中捕获它以及如何重定向到 ErrorController?
问问题
3206 次
2 回答
2
你可以用 来装饰你的控制器/动作[HandleErrorAttribute]
来做到这一点。
例如:
[HandleError]
public ActionResult PlaceOrder(OrderDetails orderDetails)
{
orderService.PlaceOrder(orderDetails);
return View("Success");
}
您可以设置适当View
的加载以取决于Exception Type
:
[HandleError(ExceptionType=typeof(PlaceOrderException),View="OrdersError"]
[HandleError(ExceptionType=typeof(Exception),View="GeneralError"]
public ActionResult PlaceOrder(OrderDetails orderDetails)
{
orderService.PlaceOrder(orderDetails);
return View("Success");
}
或者,您可以在您的全局注册它global.asax
:
GlobalFilters.Filters.Add(new HandleErrorAttribute
{
View = "Error"
});
PS:上面的例子假设你的 'Error/GeneralError/OrdersError'Views
在Shared
文件夹中。如果不是,您将需要指定完整路径。
编辑(根据您的评论):
如果要返回Json
而不是View
,请创建以下内容ActionFilter
:
public class HandleErrorJsonAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
ContentType = "application/json",
Data = new
{
Msg = "An Error Occured",
ExceptionMsg = filterContext.Exception.ToString()
}
};
}
}
然后使用新[HandleErrorJson]
属性(如上所述),或将其注册为您的global.asax
.
于 2013-06-26T08:55:24.257 回答
-1
我认为看看这个样本是个好主意。当业务逻辑层发生错误时,您可以为业务类的方法返回 false 或说 -1,然后向用户显示正确的错误消息,并且在捕获业务方法的一部分时,您可以使用流行的错误日志库之一,例如Log4NET 或 elmah。
编辑:要在发生错误时重定向用户,您可以在 web config 的自定义错误部分指定错误控制器
于 2013-06-25T17:35:46.673 回答