Исключение параметра маршрута ASP.net MVC - PullRequest
4 голосов
/ 02 марта 2012

У меня есть и действие, которое принимает параметр userId:

~ / Users / Show? = Идентификатор пользователя 1234

Все работает нормально, кроме случаев, когда предоставленный userId не является int или отсутствует.

Затем выдает это исключение:

            Message: The parameters dictionary contains a null entry for parameter 'userId' of 
    non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Show(Int32, 
System.Nullable`1[System.Boolean], System.String)' in 'S4U.Web.Mvc.Controllers.ProfileController'. An optional parameter must be a reference type, 
    a nullable type, or be declared as an optional parameter.
        Parameter name: parameters

.. после чего пользователь перенаправляется на страницу ошибки.

Как мне настроить маршрут, чтобы действие не выполнялось вообще, а вместо этого выдается 404?

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

Не используйте строку как предложено где-то ниже. Использование:

public ActionResult (int userId = 0)
{

}

Это лучшая практика.

Вы также можете сделать:

public ActionResult (int? userId)
{
    if (userId.HasValue)
    {
        //...
    }
}
1 голос
/ 02 марта 2012

Как упомянуто в моем комментарии к ответу Уфука Хаджиуллари, вы должны обрабатывать проверку либо путем добавления ограничения к маршруту, либо с использованием типа NULL, если параметр может быть пустым.

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

Сохранение параметров действия в качестве сильных типов - образец для достижения цели.

...