异常过滤器未捕获HttpException

时间:2018-05-15 14:06:08

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

我的测试项目中存在一些问题。 C#,ASP .NET MVC 5,> .NET Framework 4.5.1

由于某种原因,我的异常过滤器无法捕获由控制器抛出的HttpException。 控制器代码:

    [HttpGet]
    [HandleError(ExceptionType = typeof(HttpException), View = "Error")]
    public ViewResult Test()
    {
        throw new HttpException(404, "Not found!");
        return View();
    }

错误视图:

@model HandleErrorInfo 
@{
   ViewBag.Title = "Sorry, something went wrong!";
   Layout = "~/Views/Shared/_BasicLayout.cshtml";
}
<h1>Error: @Model.Exception.Message</h1>
<h1>Status code: @Response.StatusCode</h1>
<div style="display:none;">@Model.Exception.StackTrace</div>

我在web.config中编写了一个customErrors指令,并将mode属性设置为&#34; on&#34;和defaultRedirect属性为/Content/StaticError.html

StaticError.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
</head>
<body>
   <h1>ERROR</h1>
</body>
</html>

我尝试过抛出一些例外,例如ArgumentOutOfRange,NullReference和其他一些例外。我得到了一个定制错误视图作为响应。 但是,我正在抛出HttpException而不改变上面代码中的任何内容,我被重定向到StaticError.html。

如何抛出HttpException并获取自定义错误视图而不是黄色的死亡碎片或默认的redicrect页面?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

HttpExceptionASP.MVC管道已知的特殊异常类型,其目的是返回具有特定错误代码的HTTP响应,这实际上并不意味着不受控制的服务器错误,因此默认为{{1} HandleErrorAttribute上的代码不是500,代码不是500.查看here