自定义HandleErrorAttribute - 如何在没有ASP.NET的情况下设置结果覆盖它?

时间:2014-05-12 14:29:27

标签: c# asp.net-mvc asp.net-mvc-5

我正在努力使我的ASP.NET MVC应用程序正确处理HTTP状态代码,并在需要时为它们显示视图。我正在避免所有开箱即用的错误页面处理,因为它不是语义的(例如,框架总是使用customErrors执行302重定向)。

我有一个AuthorizeAttributeActionFilterAttribute,它们都正常工作,并显示我的自定义视图。但是,我的HandleErrorAttribute工作不正常。

public override void OnException(ExceptionContext context) {
    HttpStatusCode httpStatusCode = HttpStatusCode.InternalServerError;

    var e = context.Exception;

    if (e is HttpException) {
        var httpException = (HttpException)e;
        httpStatusCode = (HttpStatusCode)httpException.GetHttpCode();
    }

    context.Result = MyResultBuilder.SetViewByHttpCode(context.HttpContext.Request, httpStatusCode, context.Controller.ViewData.ModelState);
}

我正在设置Result属性,但在某些时候,管道覆盖了我的结果,因为我最终得到了黄色死亡屏幕(YSOD),而不是我定义的视图结果。

如何在HandleErrorAttribute

中设置自定义视图结果

1 个答案:

答案 0 :(得分:1)

尝试将ExceptionHandled属性设置为true;