Asp.net mvc asp.net MVC中未命中自定义异常筛选器
我有一个自定义异常过滤器,我用它来捕获我编写的自定义异常,但由于某种原因,当我抛出我的异常时,它永远不会到达过滤器。相反,我只是得到一个错误,用户代码没有处理我的异常。任何人都可以提供一些建议/帮助,我应该如何设置这个?相关代码如下:Asp.net mvc asp.net MVC中未命中自定义异常筛选器,asp.net-mvc,exception-handling,Asp.net Mvc,Exception Handling,我有一个自定义异常过滤器,我用它来捕获我编写的自定义异常,但由于某种原因,当我抛出我的异常时,它永远不会到达过滤器。相反,我只是得到一个错误,用户代码没有处理我的异常。任何人都可以提供一些建议/帮助,我应该如何设置这个?相关代码如下: // controller [CustomExceptionFilter] public class SomeController : Controller { public SomeController()
// controller
[CustomExceptionFilter]
public class SomeController : Controller
{
public SomeController()
{
}
public ActionResult Index()
{
SomeClass.SomeStaticMethod();
return View();
}
}
这是具有customexception属性的控制器
// some class (where exception is being thrown)
public class SomeClass
{
public static void SomeStaticMethod()
{
throw new MyCustomException("Test");
}
}
这就是抛出异常的类(对于我的测试)(我也尝试过直接在控制器上抛出异常)
这是自定义异常筛选器…当执行代码并引发异常时,它永远不会被访问。相反,我得到了上面提到的错误。我读到的所有内容都表明,这是设置此设置的正确方法,但当我在自定义筛选器中设置断点时,它从未被命中
我错过了什么
TIA一旦您处理了错误,您需要让过滤器上下文知道它已被处理。像这样:
filterContext.ExceptionHandled = true;
这应该在您的“//do stuff”部分中
我已经复制了你的代码,过滤器被调用了。我所做的唯一不同是添加了exceptionHandled代码,并在该行添加了断点。希望您仍然遵循此操作,即使它已经运行了4天。我刚刚回到这里,在if块中添加了您的代码行……它永远不会被访问,因为我的OnException方法永远不会被调用。我是否需要在某个地方设置一个标志(可能在web.config中),或者告诉应用程序在这个过滤器中处理异常?我仍然在“抛出新的MyCustomException(“测试”)时出错;“一行,表示异常未被用户代码处理。我不需要设置任何标志,也不需要向web.config添加任何内容。它只起作用。当我在调试模式下单步执行时:首先抛出异常并在那里中断。然后我按play键,它在OneException中进入断点。您尝试过在调试模式下单步执行吗?我是。”假设所有内容都在同一命名空间中,并且您只有一个CustomExceptionFilter和CustomException。此外,请尝试注释检查异常类型的代码,以防调用筛选器,但由于某些原因它与您的异常不匹配。结果是,是调试器杀死了我。当我只需rt单击e default.aspx页面和“在browwer中查看”我得到了所需的结果。我想我的调试设置需要进行一些调整吗?我不知道如何在Visual Studio中将其调低。感谢您的回答。我确实需要filterContext.ExceptionHandled=true,因此我将其标记为答案:)
filterContext.ExceptionHandled = true;