Хорошо, похоже, это известная проблема, появившаяся в MVC3, но из-за основной проблемы маршрутизации в .NET4, поэтому команда MVC не может быстро ее исправить. Хотя бесшумное возвращение нулевого значения явно является ошибкой, неясно, следует ли разрешить маршруту, который я изначально создал, работать так, как я этого хотел (см. Ниже).
Я нашел этот SO Вопрос , который просит людей повторить аналогичную проблему с двумя дополнительными параметрами, и ответ также относится к этой статье , в которой есть обходной путь. *
Я решил эту проблему в соответствии с обходным решением, сделав несколько маршрутов, используя только один необязательный параметр в каждом.
routes.MapRoute(
"Date-ByDay", // Route name
"Date/{year}/{month}/{day}", // URL with parameters
new { controller = "Date", action = "Index" } // Parameter defaults
);
routes.MapRoute(
"Date-ByMonth", // Route name
"Date/{year}/{month}", // URL with parameters
new { controller = "Date", action = "Index", month = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Date-ByYear", // Route name
"Date/{year}", // URL with parameters
new { controller = "Date", action = "Index", year = UrlParameter.Optional } // Parameter defaults
);
Можно утверждать, должен ли мой первоначальный подход работать в любом случае, к примеру, что если вы пропустите параметр ТИнструкция месяца ', и если оригинальный маршрут генерировать URL из / 2011/18? «Обходной путь», хотя и уродливый, безусловно, гораздо более откровенен в отношении поведения, которое вы хотите. Я бы сказал, что ожидаемое поведение моего первоначального маршрута является понятным (для меня), и что я ожидал бы исключения, если бы попросил маршрут с годом и днем, пропуская месяц - но я вижу, что это может быть не всем точка зрения. Однако это сработало в MVC2.