Ответ 1
public ActionResult Index(int? id)
{
if(!id.HasValue())
{
throw new HttpException(404, "Are you sure you're in the right place?");
}
}
Я получаю следующую ошибку, когда бот Google приходит:
Словарь параметров содержит нулевую запись для параметра "id" типа, отличного от nullable, "System.Int32" для метода "System.Web.Mvc.ActionResult Show (Int32)" в "someclass". Необязательный параметр должен быть ссылочным типом, нулевым типом или объявлен как необязательный параметр.
Имя параметра: параметры
Мне было интересно, возможно ли в этом случае приложение throw 404 вместо отсутствия исключения параметра.
Спасибо!
Обновить, чтобы уточнить, что я хочу, так это то, что все случаи для этой конкретной ошибки вызывают ошибку 404 вместо 500. Предпочтительно, написав какую-то оболочку, которая только ловит эту ошибку.
public ActionResult Index(int? id)
{
if(!id.HasValue())
{
throw new HttpException(404, "Are you sure you're in the right place?");
}
}
То, что вы ищете, это ограничения маршрута.
Это не новая статья, и я не могу обещать, что нет лучшего способа сделать это в недавних сборках MVC, но я думаю, что это довольно хорошая возможность:)
Я считаю, что вы должны иметь возможность написать настраиваемое связующее устройство, которое будет проверять, есть ли свойство идентификатора и которое требуется, и выбросить ошибку 404/отказаться от привязки, если она там отсутствует. Я знаю, что это не так много, но это может привести вас к правильному пути:)
P.S. Пример связующего примера +, как это работает, можно найти здесь:
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx