gpt4 book ai didi

c# - "[HandleError]"在类级别,在方法级别重写

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:38 25 4
gpt4 key购买 nike

我在类级别有一个带有 HandleError 属性的 C# MVC 3 Controller

[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;
}
}

这在我的本地主机上工作得很好。 IE。在调用方法“DoSomeStuff”[MyExceptionHandler] 中的异常时,类级别 [HandleError] 不是。但是,在开发环境中,类级别 [HandleError] 开始发挥作用。结果是呈现了 HandleError view=MyErrorPage。

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

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

最佳答案

我找到了解决方案:

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

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

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

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

然后我会认为我可以通过设置在本地主机上看到问题:

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

但出于某种原因,这没有用....无论如何,我想是另一个问题。

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

谢谢

关于c# - "[HandleError]"在类级别,在方法级别重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com