Подтвердить что ты не робот

ASP.NET MVC - HttpException или возврат?

Я пытаюсь сделать запрос для клиента, и если клиент не существует, он должен вернуть какую-то страницу "Не найден". Какая из приведенных ниже будет лучшей практикой для использования для такой задачи и почему?

public ActionResult Index(int id)
{
    if (customerService.GetCustomerById(id) == null)
        return View("NotFound");

    return View();
}

или

public ActionResult Index(int id)
{
    if (customerService.GetCustomerById(id) == null)
        throw new HttpException(404, "Customer not found");

    return View();
}
4b9b3361

Ответ 1

Бросьте 404. На самом деле нет аргументов. Это не о том, чтобы быть учеником REST, это как работает веб-сайт.

Вы можете вернуть представление и 404. Часто полезно помогать пользователю или представлять окно поиска или указывать на некоторые наиболее продаваемые товары, но сделать NotFound понятным для клиента и всегда возвращать 404 в ответе HTTP. Нет вопроса об этом.

Изменить: Это хорошее руководство: http://www.codinghorror.com/blog/2007/03/creating-user-friendly-404-pages.html

Ответ 2

Это хороший вопрос (+1), так как есть некоторые разные мнения о том, когда использовать коды HTTP-исключений, а когда нет.

Ученики REST, скорее всего, скажут вам, что вы отправляете маршрут HTTP Exception, потому что они считают, что URI идентифицирует концептуальный ресурс (то есть: фактический объект/предмет, к которому вы обращаетесь, - клиент в этом случае), и если этот ресурс не существует, тогда вы должны получить ошибку 404.

Однако некоторые из них не согласятся и скажут, что вам следует передать только ошибку 404, если физический ресурс, например. файла, не существует.

Я, как правило, попадаю во второй лагерь и рекомендую вернуть 200 OK с пользовательским представлением о том, что клиент, указанный ID, не может быть найден.