2

我有一个在类级别具有 HandleError 属性的 C# 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 被渲染。

  1. 我知道 [HandleError] 在 localhost 上是多余的,但可以更正(或配置选项)?
  2. 我不确定是否在开发环境(不是本地主机)上调用了 MyExceptionHandler 。可以在类级别[HandleError]之前调用吗?

我的问题是我需要 [MyExceptionHandler] 成为唯一调用的处理程序。我希望能够在我的本地主机上调用 [HandleError],以便我可以在本地模拟问题。

4

1 回答 1

0

我找到了解决方案:

[HandleError(View = "MyErrorPage", Order = 2)]

解决了这个问题(具体来说,Order = 2)。

原因是这个处理程序现在的优先级低于方法级处理程序。因此,首先执行方法级处理程序,根据上面的代码,它将异常标记为已处理,因此永远不会执行控制器级处理程序。

问题仅在 localhost 上的原因是因为 [HandleError] 默认情况下未在 localhost 上启用。但是,在开发环境中它是自动启用的。

然后我会认为我可以通过设置在 localhost 上看到问题:

<system.web>
   <customErrors mode="On" />

但由于某种原因,这不起作用....无论如何,我猜是单独的问题。

仅供参考,我试图在这里总结所有这些错误处理的东西(重点是 AJAX):http: //outbottle.com/net-mvc-3-custom-ajax-error-handling-2/

谢谢

于 2012-06-28T18:02:05.937 回答