Проблемы маршрутизации URL в ASP.NET MVC - PullRequest
0 голосов
/ 10 марта 2011

Я новичок в MVC и маршрутизации URL-адресов и ищу некоторые рекомендации.

Я бы хотел иметь URL для каждого пользователя в формате: http://www.example.com/username

Поэтому я добавил следующий маршрут:

routes.MapRoute(
    "UserRoute", // Route name
    "{username}", // URL
    new { controller = "Users", action = "ViewUser", username = UrlParameter.Optional }
);

Что прекрасно работает, если это ПЕРВЫЙ маршрут, но он испортил маршрут по умолчанию {controller}/{action}/{id}. Теперь, когда я пытаюсь зайти на корневую страницу, он пытается загрузить действие «ViewUser» пользователя UsersController с нулевым параметром (или с «favicon.ico» в качестве параметра).

Если я добавлю свой новый маршрут ПОСЛЕ маршрута по умолчанию, MVC попытается найти контроллер с именем username и не сможет его найти.

Есть ли способ получить URL вида {username}, не испортив обычную систему маршрутизации? Возможно, я мог бы написать собственный маршрут для каждого имеющегося у меня контроллера, но он кажется подверженным ошибкам.

Ответы [ 2 ]

1 голос
/ 10 марта 2011

Вы можете проверить эту ссылку и посмотреть, поможет ли это.Он также создает URL только с именем пользователя.

1 голос
/ 10 марта 2011

Вы можете установить ограничение на допустимые значения контроллера для маршрута по умолчанию вместо создания маршрута для каждого контроллера.

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL
    new { controller = "controller1", action = "defaultaction", id = UrlParameter.Optional }, //default values
    new { controller = @"controller1|controller2|controller3|..." }
);

, когда контроллер не соответствует ни одному из них, он попытается выполнить следующиймаршрут

...