C# 类级别的“[HandleError]”,方法级别的重写

C# 类级别的“[HandleError]”,方法级别的重写,c#,asp.net-mvc,asp.net-mvc-3,error-handling,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

我有一个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;
    }
}
这在我的本地主机上运行得非常好。也就是说,在调用方法“DoSomeStuff”[MyExceptionHandler]中的异常时,类级别[HandleError]不会被调用。 但是,在开发环境中,类级别[HandleError]起作用。结果是呈现HandleError view=MyErrorPage

我知道[HandleError]在本地主机上是冗余的,但可以进行更正或配置选项? 我不确定在开发环境中是否根本没有调用localhost MyExceptionHandler。它可以在类级别[HandleError]之前调用? 我的问题是我需要[MyExceptionHandler]是唯一调用的处理程序。
我希望能够在本地主机上调用[HandleError],以便在本地模拟问题。

我找到了解决方案:

[HandleError(View = "MyErrorPage", Order = 2)]
具体解决了问题,订单=2

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

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

然后,我认为通过设置以下内容,我可以在localhost上看到问题:

<system.web>
   <customErrors mode="On" />
但出于某种原因,这不起作用。。。。无论如何,我想是另一个问题

仅供参考,我试图在这里总结所有这些错误处理内容,重点是AJAX:


谢谢

我找到了解决方案:

[HandleError(View = "MyErrorPage", Order = 2)]
具体解决了问题,订单=2

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

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

然后,我认为通过设置以下内容,我可以在localhost上看到问题:

<system.web>
   <customErrors mode="On" />
但出于某种原因,这不起作用。。。。无论如何,我想是另一个问题

仅供参考,我试图在这里总结所有这些错误处理内容,重点是AJAX:


谢谢

你没有展示的//做的东西会引发异常吗?如果可以,它将解释这种行为。另外,在调用DoSomeStuff操作GET或POST时,您在AJAX请求中使用了哪个HTTP动词?如果您正在使用GET,这也可以解释您的问题。感谢Darin的回复。不,我不认为//do元素会引发异常。POST是正在使用的HTTP动词。我已经更新了问题中的代码来显示这一点。表单指定method=POST。谢谢。你不认为或者你已经验证并确定了吗?很好,我99.9%肯定不会有例外,但由于IT问题,目前验证时遇到了问题。当我验证时,我将在这里进行评论。谢谢//do那些你没有展示的东西会引发异常吗?如果可以,它将解释这种行为。另外,在调用DoSomeStuff操作GET或POST时,您在AJAX请求中使用了哪个HTTP动词?如果您正在使用GET,这也可以解释您的问题。感谢Darin的回复。不,我不认为//do元素会引发异常。POST是正在使用的HTTP动词。我已经更新了问题中的代码来显示这一点。表单指定method=POST。谢谢。你不认为或者你已经验证并确定了吗?很好,我99.9%肯定不会有例外,但由于IT问题,目前验证时遇到了问题。当我验证时,我将在这里进行评论。谢谢