我试图实现一种全局异常处理技术,以避免在 Controller 的每个操作上使用try/catch块,但是在达到重写的OnException方法或ErrorHandleAttribute之前,我的应用程序崩溃了。

这是一个简化的测试代码:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Test()
    {
        throw new Exception("Exception Test");
    }

    protected override void OnException(ExceptionContext filterContext)
    {
        if (filterContext == null || filterContext.ExceptionHandled)
        {
            return;
        }

        var message = filterContext.Exception.Message;
        filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest, message);
        filterContext.ExceptionHandled = true;
    }
}

并在Web.Config中:
<system.web>
    <customErrors mode="On" defaultRedirect="Error"/>

如果我在“throw”行上设置一个断点并尝试访问/Home/Test,则我的应用程序将崩溃,只有在此之后,OnException方法和HandleErrorAttribute才会到达。

我想念什么吗?

谢谢。

最佳答案

您需要注册HandleError过滤器。

filters.Add(new HandleErrorAttribute{View = "Error"});

关于asp.net - ASP.NET MVC 5中的ErrorHanldeAttribute或OnException方法未处理异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37813300/

10-13 06:27