HttpException не перехватывается фильтром исключений - PullRequest
0 голосов
/ 15 мая 2018

У меня были некоторые проблемы в моем тестовом проекте. 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>

Я написал директиву customErrors в своем файле web.config и установил для атрибута mode значение «on», а для атрибута 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 и некоторых других. И я получил сообщение об ошибке Custon в качестве ответа. Но когда я выкидываю исключение HttpException, ничего не меняя в приведенном выше коде, я перенаправляюсь в StaticError.html.

Как я могу сгенерировать исключение HttpException и получить собственное представление об ошибке вместо желтой стяжки смерти или страницы перенаправления по умолчанию?

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 15 мая 2018

HttpException - это особый тип исключения, известный конвейеру ASP.MVC, его целью является возвращение HTTP-ответа с определенным кодом ошибки, который на самом деле не означает неконтролируемую ошибку сервера, поэтому по умолчанию HandleErrorAttribute ничего не делает для HttpException с кодом, отличным от 500. Смотрите здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...