我有一个在类级别上具有C#属性的HandleError MVC 3控制器。
[HandleError(View = "MyErrorPage")]
public class MyController : Controller
{在方法层次上,我得到:
[HttpPost]
[MyExceptionHandler]
public ActionResult DoSomeStuff(FormCollection fc)
{其中MyExceptionHandler看起来像:
public class MyExceptionHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
//do Stuff
JsonResult result = new JsonResult {
Data = new {
error = "Your request blah blah...."
}
};
filterContext.Result = result;
filterContext.ExceptionHandled = true;
}
}这在我的本地主机上运行得很好。也就是说,在方法'DoSomeStuff‘MyExceptionHandler中的异常被调用时,类级HandleError不会被调用。但是,在开发环境中,类级别的HandleError起作用。结果是呈现HandleError view=MyErrorPage。
我的问题是,我需要MyExceptionHandler作为唯一被调用的处理程序。我希望能够在本地主机上调用HandleError,以便在本地模拟问题。
发布于 2012-06-28 18:02:05
我找到了解决办法:
[HandleError(View = "MyErrorPage", Order = 2)]解决了这个问题(特别是Order = 2)。
原因是该处理程序现在的优先级低于方法级别的处理程序。因此,首先执行方法级处理程序,按照上面的代码,它将异常标记为已处理,因此不会执行Controller级处理程序。
问题只出现在localhost上,原因是默认情况下本地主机上没有启用HandleError。但是,在开发环境中它是自动启用的。
然后,我会认为,通过设置以下内容,我就可以看到本地主机上的问题:
<system.web>
<customErrors mode="On" />但出于某种原因,那是行不通的.不管怎么说,我想是另外一个问题。
FYI,我试图在这里总结所有这些错误处理材料(重点是AJAX):http://outbottle.com/net-mvc-3-custom-ajax-error-handling-2/
谢谢
https://stackoverflow.com/questions/11242209
复制相似问题