我有一个C#MVC 3控制器,在类级别具有HandleError属性
[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;
}
}
这在我的localhost上完全正常。即在调用方法'DoSomeStuff'[MyExceptionHandler]中的异常时,类级别[HandleError]不是。 但是,在开发环境中,类级别[HandleError]开始起作用。结果是HandleError视图= MyErrorPage被渲染。
我的问题是我需要[MyExceptionHandler]成为唯一调用的处理程序。 我希望能够在我的localhost上调用[HandleError],这样我就可以在本地模拟这个问题。
答案 0 :(得分:0)
我找到了解决方案:
[HandleError(View = "MyErrorPage", Order = 2)]
解决了问题(具体来说,Order = 2
)。
原因是此处理程序现在的优先级低于方法级别处理程序。因此,首先执行方法级别处理程序,根据上面的代码,它将异常标记为已处理,因此永远不会执行Controller级别处理程序。
问题仅在localhost上的原因是默认情况下未在localhost上启用[HandleError]。但是,在开发环境中,它会自动启用。
我认为我可以通过设置:
在localhost上看到问题<system.web>
<customErrors mode="On" />
但由于某种原因,这不起作用....无论如何,我猜是单独的问题。
仅供参考,我试图在这里总结所有这些错误处理内容(重点关注AJAX):http://outbottle.com/net-mvc-3-custom-ajax-error-handling-2/
谢谢