Мне нужно предоставить следующие функции для одного из веб-сайтов.
http://www.example.com/ [спонсор]/{controller}/{action}
В зависимости от [спонсора] веб-страница должна быть настроена.
Я попробовал комбинацию регистрации маршрутов с помощью 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)
{
}