Обработка 404 не найдена для WebApi - PullRequest
0 голосов
/ 07 сентября 2018

Я создаю

Asp.Net MVC + AngularJS

применение. В контроллере WebApi я обрабатывал любые исключения (500, 404 и т. Д.). С другой стороны, все необработанные исключения попадают в

Global.asax.cs

файла

Application_Error

метод. Однако, если в приложении отсутствует целый API, он показывает ошибку 404 на консоли браузера, как и ожидалось, но в этом случае мне также нужно перенаправить на правильный интерфейс (html / cshtml). Как я могу обработать этот тип исключений?

P.S. Я пытался использовать

CustomErrors

собственность в

Web.config

файл тоже, но это было напрасно.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Вот несколько способов обработки ошибок API для перенаправления.

Использование jQuery.ajaxError () .

$(document)
    .ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
        if (jqXHR.status == 404) {
            window.location.replace("http://www.stackoverflow.com");
        }
    });

Использование jQuery.ajaxSetup () .

$.ajaxSetup({
    global: true,
    error: function(xhr, status, err) {
        if (xhr.status == 404) {
           window.location.replace("http://www.stackoverflow.com");
        }
    }
});

Если вам нужен угловой способ, вы можете использовать [Javascript] Глобальный обработчик ошибок Ajax с AngularJS .

$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
  return {
    'response': function(response) {
      // do something on success
      return response || $q.when(response);
    },

   'responseError': function(rejection) {
      // do something on error
      if (canRecover(rejection)) {
        return responseOrNewPromise;
      }
      return $q.reject(rejection);
    }
  };
});

$httpProvider.interceptors.push('myHttpInterceptor');

angular.module("globalErrors", ['appStateModule']).factory "myHttpInterceptor", ($q, $log, growl) ->
  response: (response) ->
    $log.debug "success with status #{response.status}"
    response || $q.when response

  responseError: (rejection) ->
    $log.debug "error with status #{rejection.status} and data: #{rejection.data['message']}"
    switch rejection.status
      when 404
        window.location.replace("http://www.stackoverflow.com");
      else
        console.log(rejection.status);

    # do something on error
    $q.reject rejection

.config ($provide, $httpProvider) ->
  $httpProvider.interceptors.push('myHttpInterceptor')

Это основано на AngularJS 1.1.4. Вы можете применить аналогичную стратегию, если вы используете другую версию.

0 голосов
/ 07 сентября 2018

Вам необходимо выполнить следующие шаги,

  1. Создание контроллера для обработки ошибок
  2. Настройка маршрута для этого контроллера ошибок
  3. Обрабатывать ошибку 404 с помощью пользовательского IHttpControllerSelector.
  4. Передайте запрос вышеупомянутому пользовательскому IHttpControllerSelector, если в выбранном контроллере не найден соответствующий метод действия. это можно сделать с помощью пользовательского IHttpActionSelector.
  5. Наконец, зарегистрируйте пользовательский IHttpControllerSelector и IHttpActionSelector в файле global.asax.cs

Пожалуйста, следуйте Этот потрясающий учебник, написанный Имраном Балохом для подробной информации

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