Noor Mahdi Ответов: 1

Как настроить маршрутизацию в MVC для различных контроллеров на основе параметров


Привет,

Нужна помощь, чтобы узнать, возможно ли это в ASP.Net MVC5

Я хочу настроить маршрутизацию таким образом, чтобы

1. www.myWebsite.com указывает на Главная Страница/Индекс и
2. www.myWebsite.com/2/3 указывает на Глава/Индекс

У меня есть HomeController с параметрическим индексным действием (которое отлично работает с конфигурацией маршрута по умолчанию) и
У меня есть ChapterController с 2 параметрами, значения которых должны быть введены из URL-адреса (например: 2 & 3 из примера URL-адреса выше)

Мой текущий маршрут выглядит следующим образом
routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );


Мой контроллер главы выглядит следующим образом
public class ChapterController : Controller
{
        public ActionResult Index(short? chapterID, short? verseNumber)
        {

            ViewModel vm = new ViewModel();
            vm.message = $"chapter: {chapterID} & verse: {verseNumber}";
            return View(vm);
        }
}


Что я уже пробовал:

попытался добавить запись MapRoute, как показано ниже, но она не работает :(
routes.MapRoute(
    name: "Chapter",
    url: "{chapterID}/{verseNumber}",
    defaults: new { controller = "Chapter", action = "Index", verseNumber = UrlParameter.Optional }
);

1 Ответов

Рейтинг:
1

Richard Deeming

Попробуйте добавить ограничения к вашим параметрам:

routes.MapRoute(
    name: "Chapter",
    url: "{chapterID}/{verseNumber}",
    defaults: new { controller = "Chapter", action = "Index", verseNumber = UrlParameter.Optional },
    constraints: new { chapterID = @"\d+", verseNumber = @"\d*" }
);

Убедитесь, что он отображается перед маршрутом по умолчанию.