“[HandleError]”在类级别,在方法级别覆盖

时间:2012-06-28 10:01:26

标签: c# asp.net-mvc asp.net-mvc-3 error-handling

我有一个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被渲染。

  1. 我知道[HandleError]在localhost上是多余的,但是可以打开更正(或配置选项)吗?
  2. 我不确定是否在开发环境(而不是localhost)上调用了MyExceptionHandler。它可以在类级别[HandleError]之前调用吗?
  3. 我的问题是我需要[MyExceptionHandler]成为唯一调用的处理程序。 我希望能够在我的localhost上调用[HandleError],这样我就可以在本地模拟这个问题。

1 个答案:

答案 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/

谢谢