Проверка пустые указатели в ASP.NET Контроллеры MVC

Другой вопрос о мнении:

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

1
задан Brian McCord 1 June 2010 в 22:11
поделиться

3 ответа

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

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

2
ответ дан 3 September 2019 в 00:08
поделиться

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

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

    // ....

    return ...;
}

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

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

0
ответ дан 3 September 2019 в 00:08
поделиться

Я использую метод, аналогичный статье, на которую вы ссылаетесь: фильтр действий, который возвращает 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
ответ дан 3 September 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: