В ASP.NET MVC я должен перенаправить на страницу ошибки или просто вернуть представление об ошибке? - PullRequest
2 голосов
/ 18 ноября 2011

Когда я задаю этот вопрос, я в основном думаю о плохих параметрах.Параметры где:

  • int <= 0 </li>
  • string пусто или пропущено
  • привязанный к модели объект отсутствует ключевые свойства
  • " идентификатор не найден ошибок " («действительный» целочисленный идентификатор передается в действие, но нет соответствующей записи в базе данных)

Вотдва сценария обработки ошибок, о которых я говорю:

public ActionResult GoToError(int value, string name)
{
    if (value <= 0 || string.IsNullOrWhiteSpace(name))
    {
        // Parameter(s) not meeting basic conditions
        TempData["ErrorMessage"] = "Invalid parameters";
        return RedirectToAction("Index", "Error");
    }

    return View();
}

public ActionResult ReturnView(int value, string name)
{
    if (value <= 0 || string.IsNullOrWhiteSpace(name))
    {
        // Parameter(s) not meeting basic conditions
        ViewData["ErrorMessage"] = "Invalid parameters";
        return View("Error");
    }

    return View();
}

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

Существуют различные сценарии, которые необходимо обрабатывать по-разному:

  • Для полностью неожиданных ошибок вы не ожидаете, я предлагаю разрешитьВозникновение исключения и его обработка в методе Controller.OnException(...) и / или на пользовательских страницах asp.net
  • Для распространенных ожидаемых ошибок , например, пользователь, предоставляющий неверный ввод, правильно возвращать представление и отображать ошибки, переданные через ModelState.Errors
  • Если действие предназначено для , вызываемое через AJAX/ Javascript / Как сервис , вам нужно согласовать, что вы отправляете обратно.Это может быть пользовательский объект JSON или конкретное представление.

На основании того, что вы опубликовали, я не могу классифицировать погоду, которую они "ожидают" или "не ожидают".Главный вопрос: как клиент этих вызовов ожидает, что они будут обработаны?

0 голосов
/ 18 ноября 2011

Правильно делать ошибки в ASP.NET совсем не сложно из-за кошмара.

Если вы понимаете, для чего предназначен веб:

Вы должны вернуть результат ошибки для любогоневозможно восстановить после ошибки, например, 400 неверных запросов, ресурс 404 не найден и т. д. Сюда входит большинство ошибок в диапазоне 4xx.

Для ошибок приложения, которые являются необработанным исключением, которое приведет к ошибке 500,правильное решение состоит в том, чтобы выполнить перенаправление 302 на страницу ошибки, которая правильно возвращает код состояния 500.

Как сказал @Darin Dimitrov, в приложениях RESTful никогда не следует создавать перенаправление для чего-либо, что всегда должно возвращатьрезультат окончательно.

0 голосов
/ 18 ноября 2011

В приложении RESTFul вы должны вернуть представление и установить соответствующий код состояния HTTP (401, 403, 404, 500, ...).При перенаправлении это означает код состояния 200 и возврат кода состояния 200 для страницы с ошибкой не имеет смысла.Вот метод , который я использую для обработки ошибок.Это также очень хорошо работает с AJAX, когда вы можете подписаться на разные коды состояния.Например, давайте предположим, что у вас есть аутентифицированный сайт, на котором вошедшие в систему пользователи могут выполнять запросы AJAX.После определенного бездействия их сеанс может истечь, и когда им потребуется выполнить некоторый AJAX-запрос, если ваш сервер не вернет правильный код состояния (в данном случае 401), клиентскому сценарию будет сложно понять и обработать сценарий.

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