Как я могу добиться чистой маршрутизации URL с пользовательским идентификатором пользователя? - PullRequest
3 голосов
/ 28 августа 2011

Мой сайт ASP.NET MVC позволяет пользователям регистрироваться и давать себе имена пользователей, которые будут уникальными и позволять другим просматривать свои страницы с чистым URL-адресом, включающим их имена, как это делают Twitter, Facebook, LinkedIn и т. Д.

Например:

  • mysite.com / michael.guthrie
  • mysite.com / джон
  • mysite.com / Джон / изображения
  • mysite.com / джон / блог

и т.д.

Проблема в том, что первый сегмент URL может использоваться для других «обычных» контроллеров / действий, например:

  • mysite.com / о
  • mysite.com / регистрация

Таким образом, в основном я ищу схему маршрутизации, которая говорит что-то вроде: если первый сегмент URL является известным контроллером, обрабатывайте его как контроллер (и анализируйте соответствующие действия и параметры как обычно), а если нет - рассматривайте его как имя пользователя и передать его выделенному контроллеру + действие, которое проанализирует его и продолжит соответственно.

Я не хочу решение, которое заставит меня добавлять маршруты для каждого конкретного контроллера, который у меня есть, так что после того, как модуль маршрутизации пройдет через все из них и не найдет соответствия , он доберется до последнего, который определяет маршрут для этого специального сегмента имени пользователя. Причина в основном в обслуживании (я должен не забыть добавлять маршрут каждый раз, когда я, например, кодирую новый контроллер).

Я предполагаю, что могу реализовать свой собственный MvcRouteHandler / IRouteHandler, но я чувствую, что должно быть более простое решение, которое не заставит меня настроить механизм маршрутизации MVC "из коробки".

Примечание: Я прочитал Как получить красивый URL-адрес страницы USER, такой как Facebook или Twitter? и он не отвечает на мой вопрос, он просто говорит, что есть Модуль перезаписи URL.

Вы знаете какой-нибудь хороший, элегантный, чистый способ достичь этого?

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Ваш первый маршрут должен быть вашим маршрутом Usesr с ограничением маршрута в соответствии с тем, что я описал в этом ответе: Вопрос маршрутизации MVC .

Если ваш маршрут находится вформа {имя пользователя} / {controller} / {id}, этот маршрут должен охватывать все непредвиденные обстоятельства.

0 голосов
/ 28 августа 2011

в файле global.asax вы можете отобразить ваши маршруты в методе registerRoutes () вы можете сделать что-то вроде этого:

routes.MapRoute(
                "ToonStudenten", // Route name
                "{controller}/{action}/{userID}, // URL with parameters
                new { controller = "Docent", action = "ToonStudenten", userID = UrlParameter.Optional} // Parameter defaults
            );

Полагаю, вы можете изменить внешний вид ваших представлений с этой картой. Маршрутизация, не совсем уверенный, каким образом, хотя ... попытается найти ее

Возможно, вы захотите взглянуть на этот пост: MVC 3, сохраняющий короткий URL

Вам не нужно устанавливать маршрут для каждого URL. С небольшой помощью ограничений маршрута вы можете сделать что-то вроде этого:

routes.MapRoute(
    "Home", // Route name
    "{action}", // URL with parameters
    new { controller = "Home", action = "Index" }, // Parameter defaults
    new { action = "TaskA|TaskB|TaskC|etc" } //Route constraints
);

routes.MapRoute(
    "Account", // Route name
    "{action}", // URL with parameters
    new { controller = "Account", action = "Logon" }, // Parameter defaults
    new { action = "Logon|Logoff|Profile|FAQs|etc" } //Route constraints
);
...