asp.net mvc url маршрутизация - PullRequest
2 голосов
/ 26 августа 2009

Как мне сопоставить что-то вроде domain.com/username? Проблема в том, что я думаю, что маршрутизация MVC ищет контроллер, чтобы определить, как он должен обрабатывать запрос сопоставления.

Я довольно новичок в ASP.NET MVC.

Тем не менее, основываясь на руководствах, механизм маршрутизации выглядит довольно жестким.

Ответы [ 3 ]

6 голосов
/ 26 августа 2009

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

routes.MapRoute("MyRoute", 
                 "{username}", 
                 new { controller = "Home", action = "Index", username = "" });

При этом выбирается контроллер по умолчанию («Домашний») и метод действия по умолчанию («Индекс») и передается ему параметр имени пользователя (по умолчанию «»).

Осторожнее с этим маршрутом, потому что он будет соответствовать практически любому URL, который вы можете себе представить. Это должен быть последний маршрут, который вы добавляете в свои сопоставления, чтобы другие ваши маршруты имели шанс сначала перейти по URL.

1 голос
/ 30 августа 2009
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute("MyRoute",
              "{id}",
              new { controller = "Home", action = "User", id = "" });


            routes.MapRoute(
              "Default",                                              // Route name
              "{controller}/{action}/{id}",                           // URL with parameters
              new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
          );

Если у меня что-то подобное, я могу указать на что-то вроде mydomain.com/userid, а также mydomain.com/home/index/1. Однако, если я просто зайду на mydomain.com, он перейдет на страницу, используемую для идентификатора пользователя, что имеет смысл, потому что он сопоставляется с первым правилом маршрута и думает, что идентификатор равен "", но как мне остановить это поведение?

1 голос
/ 26 августа 2009

Чтобы добавить в womp - я бы пошел по этому пути (каламбур):

routes.MapRoute("MyRoute", 
                 "user/{username}", 
                 new { controller = "User", action = "Index", username = "" });

Это сопоставит URL-адреса с: domain.com/user/ndomusernamecasts

И вы всегда можете изменить контроллер и действие на любое другое.

...