HandleErrorAttribute derived class 是不是没有捕获异常?
HandleErrorAttribute derived class is not catching exceptions?
我有一个 ASP.NET MVC 网络应用程序,我正在尝试改进它的错误处理能力。我阅读了 HandleErrorAttribute 基础 class 并想将其用于我的控制器 classes。但是,当我从我的一个控制器 classes 中的一个方法中抛出一个测试异常时,它用该属性装饰, OnException 在我的派生 class 中覆盖未触发。我没有触发派生错误处理 class 的 OnException 方法,而是看到 XML 格式的一般错误消息,并且一般错误消息是 not found anywhere in my app:
<Error>
<Message>An error has occurred.</Message>
</Error>
我做错了什么?
注意我尝试将以下自定义错误元素添加到 web.config 文件中的 system.web 元素正如这个 SO post 所指出的,但是 它没有帮助:
ASP.net MVC [HandleError] not catching exceptions
<customErrors mode="On" defaultRedirect="Error" />
这是我派生的 HandleErrorAttribute class:
public class HandleControllerErrors : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
// Breakpoint set here never hit.
Exception ex = filterContext.Exception;
filterContext.ExceptionHandled = true;
var model = new HandleErrorInfo(filterContext.Exception, "Controller", "Action");
filterContext.Result = new ViewResult()
{
// Use the ErrorInController view.
ViewName = "ErrorInController",
ViewData = new ViewDataDictionary(model)
};
}
}
下面是我如何装饰我的控制器 class。我有一个方法强制抛出 not 在 try/catch 块内的异常。:
[HandleControllerErrors]
public class ValuesController : ApiController
{
[Route("Api/TestException/")]
public IHttpActionResult TestException()
{
throw new InvalidCastException("Fake invalid cast exception.");
}
}
尝试将其添加到全局过滤器中:
filters.Add(new HandleControllerErrors {View = "Error"});
ApiController 与 MVC 控制器不同,因此这可能行不通。 Web API 中的错误处理方式略有不同。检查以下 link 以获取 Web API 的异常处理属性:
http://www.asp.net/web-api/overview/error-handling/exception-handling
我有一个 ASP.NET MVC 网络应用程序,我正在尝试改进它的错误处理能力。我阅读了 HandleErrorAttribute 基础 class 并想将其用于我的控制器 classes。但是,当我从我的一个控制器 classes 中的一个方法中抛出一个测试异常时,它用该属性装饰, OnException 在我的派生 class 中覆盖未触发。我没有触发派生错误处理 class 的 OnException 方法,而是看到 XML 格式的一般错误消息,并且一般错误消息是 not found anywhere in my app:
<Error>
<Message>An error has occurred.</Message>
</Error>
我做错了什么?
注意我尝试将以下自定义错误元素添加到 web.config 文件中的 system.web 元素正如这个 SO post 所指出的,但是 它没有帮助:
ASP.net MVC [HandleError] not catching exceptions
<customErrors mode="On" defaultRedirect="Error" />
这是我派生的 HandleErrorAttribute class:
public class HandleControllerErrors : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
// Breakpoint set here never hit.
Exception ex = filterContext.Exception;
filterContext.ExceptionHandled = true;
var model = new HandleErrorInfo(filterContext.Exception, "Controller", "Action");
filterContext.Result = new ViewResult()
{
// Use the ErrorInController view.
ViewName = "ErrorInController",
ViewData = new ViewDataDictionary(model)
};
}
}
下面是我如何装饰我的控制器 class。我有一个方法强制抛出 not 在 try/catch 块内的异常。:
[HandleControllerErrors]
public class ValuesController : ApiController
{
[Route("Api/TestException/")]
public IHttpActionResult TestException()
{
throw new InvalidCastException("Fake invalid cast exception.");
}
}
尝试将其添加到全局过滤器中:
filters.Add(new HandleControllerErrors {View = "Error"});
ApiController 与 MVC 控制器不同,因此这可能行不通。 Web API 中的错误处理方式略有不同。检查以下 link 以获取 Web API 的异常处理属性:
http://www.asp.net/web-api/overview/error-handling/exception-handling