Проблема в том, что месяц, в который вы передаете Url.Action
, является месяцем с одной цифрой и, следовательно, не соответствует ограничению месяца в определении маршрута. Ограничения обычно запускаются не только для входящих URL-адресов, но и при создании URL-адресов.
Исправление будет заключаться в том, чтобы вручную вызывать .ToString () для месяца и форматировать его как двузначное число. Вам нужно будет сделать то же самое в течение дня. Для года это не проблема, поскольку все годы нашей жизни будут состоять из четырех цифр.
Вот пример кода для форматирования чисел:
int month = 2;
string formattedMonth = month.ToString("00", CultureInfo.InvariantCulture);
// formattedMonth == "02"
Обратите внимание, что при форматировании числа вручную необходимо использовать инвариантную культуру, чтобы различные культуры и языки не влияли на ее форматирование.
Вам также необходимо установить значения по умолчанию для месяца и дня, чтобы они не требовались в URL:
routes.MapRoute(
"Blog",
"blog/{year}/{month}/{day}",
new { controller = "Blog", action = "Index", month = "00", day = "00" },
new { year = @"\d{4}", month = @"\d{2}", day = @"\d{2}" }
);
И в вашем действии контроллера проверьте, равны ли месяц или день 0, и в этом случае вы должны показать целый месяц или весь год.