威尔的错误处理
post
真棒!我还没有使用elmah,但是我想开始在每个控制器的基础上向异常添加一些我自己的数据。现在,我有一个基控制器覆盖
OnException(ExceptionContext)
按照所有项目控制器继承的遗嘱。
我想我知道我需要定制另一个
OnException
在每个控制器上重写,但如何将数据传递到该异常中?我需要的数据不一定总是单个文本值。
-
我应该抛出自定义异常吗?
-
我应该扔通用的吗
Exception(string)
异常并在重写中以某种方式访问它们?
编辑
这听起来可能很愚蠢,但是否有任何方法可以处理未处理的错误并仍然挖掘这些信息?如果不是这样,我能看到的唯一解决方案就是在每个控制器方法的开头创建自定义异常实例,因为远程可能需要它。这是唯一的方法吗?
另一个编辑
每
Lost In Tangent's
post(和第2部分),我修改了这个customFactory类,并在global.asax中注册了它。他发布到base.requestContext的引用无效。
public class CustomFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
{
var controller = (Controller)base.GetControllerInstance(requestContext, controllerType);
controller.ActionInvoker =
new CustomControllerActionInvoker(new ControllerContext(requestContext, controller));
return controller;
}
}
然后在我的CustomControllerActionInvoker类中,我重写InvokeAction:
public override bool InvokeAction(ControllerContext controllerContext, string actionName)
{
try
{
return base.InvokeAction(controllerContext, actionName);
}
catch (Exception)
{
throw;
}
}
我认为catch块是brian建议我创建viewresult的地方,但是我如何根据它来自哪个控制器创建正确的类型呢?