代码之家  ›  专栏  ›  技术社区  ›  Alex

HttpException未被异常筛选器捕获

  •  2
  • Alex  · 技术社区  · 7 年前

    我的测试项目有一些问题。 C#,ASP。净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>
    

    我在我的网站上写了一个customErrors指令。配置并将mode属性设置为“on”,将defaultRedirect属性设置为/Content/StaticError。html

    静态错误。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和其他一些异常。我得到了一个custon错误视图作为响应。 但当我抛出HttpException而不更改上面代码中的任何内容时,我会被重定向到StaticError。html。

    如何抛出HttpException并获取自定义错误视图,而不是黄色的死亡熨平板或默认的重新更正页面?

    非常感谢您的帮助。

    1 回复  |  直到 7 年前
        1
  •  2
  •   UladzislaÅ­    7 年前

    HttpException 是已知的特殊异常类型 ASP.MVC 管道,其目的是返回带有特定错误代码的HTTP响应,这实际上并不意味着不受控制的服务器错误,因此默认 HandleErrorAttribute 在上不执行任何操作 HttpException 代码不是500。看 here