Как заставить работать этот ASP.NET MVC Route для URL в стиле твиттера? - PullRequest
1 голос
/ 23 апреля 2009

пытается отобразить следующий стиль маршрута: http://site.com/username так же, как вы можете сделать http://www.twitter.com/user

Мое первоначальное решение состояло в том, чтобы иметь следующие маршруты:

//site.com/rathboma - maps to user details for rathboma
            routes.MapRoute("Users", "{id}", new { controller = "Users", action = "Details" });

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

И это работало нормально, пока я не попытался сделать следующее в моем контроллере 'Links':

public ActionResult Details(string id)
        {
            int newId;
            if (!int.TryParse(id, out newId))
                return RedirectToAction("Index");


            WebLink results = Service.GetWebLink(newId, 5);

            if (results == null)
                return RedirectToAction("Index");

            return View(results);
        }

Эти методы RedirectToAction пытаются вернуть браузер на http://site.com/Users (у меня есть пользовательский контроллер) вместо указания на http://site.com/Links/index

Почему это происходит?

Как мне организовать маршруты, чтобы эта работа работала правильно?

Я счастлив пожертвовать http://site.com/links и перейти к http://site.com/links/index, если придется. Но как мне это обеспечить?

Спасибо всем за помощь

EDIT:

Я знаю, что является причиной этого, он пытается перенаправить на http://site.com/links (страница индекса), но ссылки выбираются как имя пользователя и перенаправляются на / users / details, когда он не может найти user 'links' пытается перенаправить на действие IndexController Index, которое отображается на / users, и цикл продолжается ('users' не тот пользователь, которого он может найти, поэтому перенаправляет бесконечно).

Итак, я думаю, что мой подвопрос: как заставить mvc всегда использовать / links / index вместо простого использования / links для страницы индекса?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2009

Попробуйте добавить этот маршрут до вашего маршрута пользователя:

routes.MapRoute("Links", 
                "{controller}/{id}", 
                 new { controller = "Links", action = "Details" });

Это должно тогда работать для

http://mysite.com/Links/id

&

http://mysite.com/username

0 голосов
/ 23 апреля 2009

Я считаю, что изменение RedirectToAction("Index"); на RedirectToAction("Index", "Links"); в вашем контроллере Links должно решить проблему без необходимости изменения маршрутов.

Проблема в том, что у вас есть два очень жадных маршрута. Я бы разбил маршрут по умолчанию на менее жадные маршруты:

routes.MapRoute("Links", 
                "Links/{id}", 
                 new { controller = "Links", action = "Index" });


routes.MapRoute("Users", 
                "{id}", 
                 new { controller = "Users", action = "Details" });

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

Причиняет URL быть следующим:

site.com/links/5  - hits the Links controller
site.com/name     - hits the Users controller
site.com/         - hits the home controller
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...