Мне нужно предоставить следующие функции для одного из веб-сайтов.
http://www.example.com/ [спонсор] / {контроллер} / {действие}
В зависимости от [спонсора] веб-страница должна быть настроена .
Я пробовал комбинировать регистрацию маршрутов с Application_Start и Session_Start, но не смог заставить его работать.
public static void RegisterRoutes(RouteCollection routes, string sponsor)
{
if (routes[sponsor] == null)
{
routes.MapRoute(
sponsor, // Route name
sponsor + "/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
}
Также должно работать поведение по умолчанию без [спонсора] . Кто-нибудь, пожалуйста, дайте мне знать, технически возможно ли иметь необязательный первый параметр в URL-адресе MVC3. Если да, поделитесь реализацией. Спасибо.
Обновленный код После внесения изменений, предложенных Сергеем Кудрявцевым , код работает, когда задано значение. Если имя не указано, MVC не выполняет маршрутизацию к контроллеру / действию.
Обратите внимание, что это работает только для домашнего контроллера (и того, и другого, и не спонсирующего). Для других контроллеров / действий, даже если указан параметр спонсора, это не маршрутизация.
Пожалуйста, предложите, что нужно изменить.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"SponsorRoute",
"{sponsor}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"NonSponsorRoute",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional, sponsor = string.Empty }
);
}
Метод действий
public ActionResult Index(string sponsor)
{
}