CustomErrors mode = On не перенаправляет на настраиваемую страницу ошибок в ASP.Net Web API 2.0

Я пытаюсь создать страницу customError в нашем проекте веб-API. Если в API возникла какая-либо необработанная ошибка, мне нужно перенаправить на какую-то настраиваемую страницу или если маршрут недоступен, мне также нужно перенаправить на какую-то настраиваемую страницу с ошибкой. Для этого я добавил следующие настройки в файл web.config.

<compilation debug="true" targetFramework="4.5" />
<customErrors mode="On" defaultRedirect="~/Error">
  <error statusCode="404" redirect="~/Error"/>
</customErrors>

Я добавил представление Error.cshtml в общую папку. (Примечание: в моем проекте нет контроллера ошибок)

Но если я попаду на какой-либо недопустимый путь, я получаю страницу настройки IIS 404. См. Снимок экрана.  введите описание изображения здесь

Не уверен, что именно мне не хватает. Также, если я подключил отладчик, он не поступает в метод Application_Error из Global.asax.cs (например, ошибки 404/501). Удивительно.

Ваша помощь будет оценена по достоинству.


person rajk    schedule 21.05.2018    source источник
comment
настраиваемая страница ошибок предназначена для обычных контроллеров mvc, а не для apiControllers, поскольку контроллеры api не ссылаются на страницу просмотра   -  person Elyas Esna    schedule 22.05.2018
comment
Тогда какой вариант? Как я могу реализовать вышеупомянутый сценарий?   -  person rajk    schedule 22.05.2018
comment
вам могут помочь следующие ссылки: link1 link2   -  person Elyas Esna    schedule 22.05.2018


Ответы (1)


Сегодня у меня такая же проблема, и я нашел решение, которое может вам помочь. Я предполагаю, что в вашем контроллере вы делаете что-то вроде этого:

 public ActionResult AddReport
    ... 
    if (something is bad...)
         return HttpNotFound("Hey you have some beautiful error here");

Итак, это возвращает именно тот снимок экрана, который вы включили в свой вопрос.
Решение состоит в том, чтобы сделать это таким образом

  public ActionResult AddReport
    ... 
    if (something is bad...)
         return new HttpException(404, "Hey you have some beautiful error here");

ИЗМЕНИТЬ

Основываясь на вашем комментарии, это не практичное решение, когда у вас уже много контроллеров.

В этом случае вы можете попробовать отредактировать свой web.config и заменить тег этим

<httpErrors errorMode="Custom">
  <remove statusCode="404"/>
  <error statusCode="404" path="/Error.html" responseMode="ExecuteURL"/>
</httpErrors>

Удачного кодирования !!

person Abdelkader KEBIR    schedule 11.06.2018
comment
Но тогда я должен сделать это для всех способов действия. Это непрактичное решение. - person rajk; 12.06.2018