首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"[HandleError]“在类级别,重写在方法级别

"[HandleError]“在类级别,重写在方法级别
EN

Stack Overflow用户
提问于 2012-06-28 10:01:25
回答 1查看 815关注 0票数 2

我有一个在类级别上具有C#属性的HandleError MVC 3控制器。

代码语言:javascript
复制
[HandleError(View = "MyErrorPage")]   
public class MyController : Controller
{

在方法层次上,我得到:

代码语言:javascript
复制
[HttpPost]
[MyExceptionHandler]
public ActionResult DoSomeStuff(FormCollection fc)
{

其中MyExceptionHandler看起来像:

代码语言:javascript
复制
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在本地主机上是多余的,但可以纠正(或配置选项)吗?
  2. 我不确定在开发环境(不是本地主机)上是否调用了MyExceptionHandler。它可以在类级HandleError之前调用。

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

EN

回答 1

Stack Overflow用户

发布于 2012-06-28 18:02:05

我找到了解决办法:

代码语言:javascript
复制
[HandleError(View = "MyErrorPage", Order = 2)]

解决了这个问题(特别是Order = 2)。

原因是该处理程序现在的优先级低于方法级别的处理程序。因此,首先执行方法级处理程序,按照上面的代码,它将异常标记为已处理,因此不会执行Controller级处理程序。

问题只出现在localhost上,原因是默认情况下本地主机上没有启用HandleError。但是,在开发环境中它是自动启用的。

然后,我会认为,通过设置以下内容,我就可以看到本地主机上的问题:

代码语言:javascript
复制
<system.web>
   <customErrors mode="On" />

但出于某种原因,那是行不通的.不管怎么说,我想是另外一个问题。

FYI,我试图在这里总结所有这些错误处理材料(重点是AJAX):http://outbottle.com/net-mvc-3-custom-ajax-error-handling-2/

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11242209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档