Проверка на нулевые значения в контроллерах ASP.NET MVC - PullRequest
1 голос
/ 02 июня 2010

Другой вопрос:

Как правильно (по вашему мнению) проверять наличие нулей в контроллере MVC.Например, если у вас есть контроллер редактирования, который выбирает запись из базы данных на основе идентификатора, что вы будете делать, если эта запись не найдена?Я нашел эту статью , но я не уверен, что мне нравится этот метод.Вы просто проверяете это с помощью оператора if и перенаправляете на страницу 404?Какое решение вы используете?

Ответы [ 3 ]

2 голосов
/ 02 июня 2010

Я не знаю, является ли это лучшей практикой, но я проверяю с помощью if и перенаправляю в представление «NotFound», в котором говорится «Компания / клиент / все, что вы просили, не существует или было удалено»

Сделал это просто, потому что я, следуя инструкции NerdDinner , настраивал скелет моего сайта, и вот как они это делают.

0 голосов
/ 02 июня 2010

Я использую метод, аналогичный статье, на которую вы ссылались: фильтр действий, который возвращает 404, если модель представления является нулевой. Я объединил его с инициатором настраиваемого действия (например, this ), чтобы мне не приходилось ставить атрибут filter на все.

Поскольку я упомянул об этом, есть несколько других типов действий, которые вы можете выполнить, если вы пойдете по маршруту фильтра действий. У меня есть / были фильтры, которые будут:

  1. Автоматическое перенаправление в индексное представление после успешного редактирования.
  2. Перенаправить на ту же страницу, если ModelState недействителен.
  3. Перенаправление на страницу отказа в доступе при возникновении исключения безопасности.

Я думаю о рефакторинге их в реестр конвенций, чтобы у меня было что-то вроде:

When.ModelIsNull.RedirectTo<SharedController>(c => c.NotFound());
For("Edit").ModelStateIsInvalid.Redisplay();
For("Edit").OnSuccess.RedirectTo("Index");
On<SecurityException>().RedirectTo<SharedController>(c => c.AccessDenied());

Тогда, если я хочу изменить то, как работает определенное поведение, я просто изменяю его в одном месте. Например, вместо перехода к «Индексу» я мог бы перенаправить в представление «Просмотр».

For("Edit").OnSuccess.RedirectTo("View");

Надеюсь, это даст вам некоторые идеи.

Редактировать: Здесь - это то, как можно сделать что-то подобное, используя FubuMVC (из которого я люблю красть идеи)

0 голосов
/ 02 июня 2010

Вот что я делаю в своем блоге:

public ActionResult DisplayPublication (int nr)
{
    if (!PublicationExists (nr))
        throw new (HttpException (404, ""));

    // ....

    return ...;
}

Как общее практическое правило, если запрашивается ресурс, который на самом деле не существует, вернуть HTTP 404. Определенно не возвращать 200 OK вместе с сообщением об отсутствующем ресурсе. Если не найдено, должно быть 404. Если вы изменили структуру своих URL, рассмотрите 301 Moved Permanently.

В зависимости от типа и логики программного обеспечения, которое вы разрабатываете, вы можете решить по-разному реагировать на эту ситуацию, это ваше дело.

...