Другой вопрос о мнении:
Что является надлежащим (по Вашему мнению) для проверки на пустые указатели в контроллере MVC. Например, если у Вас есть контроллер редактирования, который выбирает запись от дб на основе идентификатора, что Вы делаете, если та запись не найдена? Я нашел эту статью, но я не уверен, что мне нравится этот метод. Вы просто проверяете на него с если оператор и перенаправление к 404 страницам? Какое решение Вы используете?
Я не знаю, является ли это лучшей практикой, но я проверяю с помощью if и перенаправляю на представление "NotFound", которое гласит: "Компания/клиент/что бы вы ни запросили, не существует или была удалена."
Я сделал это так просто потому, что следовал руководству NerdDinner при создании скелета моего сайта, и именно так они это делают.
Вот что я делаю в своем блоге:
public ActionResult DisplayPublication (int nr)
{
if (!PublicationExists (nr))
throw new (HttpException (404, ""));
// ....
return ...;
}
В качестве общего правила, если запрашивается ресурс, которого на самом деле не существует, верните HTTP 404. Определенно не следует возвращать 200 OK вместе с сообщением об отсутствующем ресурсе. Если ресурс не найден, должно быть 404. Если вы изменили структуру своих урлов, рассмотрите вариант 301 Moved Permanently.
В зависимости от типа и логики программного обеспечения, которое вы разрабатываете, вы можете принять решение о другой реакции на эту ситуацию, решать вам.
Я использую метод, аналогичный статье, на которую вы ссылаетесь: фильтр действий, который возвращает 404, если модель представления равна нулю. Я объединил его с инициатором настраиваемого действия (например, this ), так что мне не нужно ставить атрибут filter на все.
Поскольку я уже упоминал об этом, есть несколько других типов действий, которые вы можете выполнять, если вы идете по маршруту фильтра действий. У меня есть / были фильтры, которые:
Я думаю об их рефакторинге в реестр соглашений, чтобы у меня было что-то вроде:
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 (из которого я люблю красть идеи)