Маршрутизация ASP.net MVC с необязательным первым параметром

Мне нужно предоставить следующие функции для одного из веб-сайтов.

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)
    {
    }

10
задан Cœur 31 December 2016 в 06:52
поделиться