Как сопоставить маршрут для / News / 5 моему контроллеру новостей - PullRequest
13 голосов
/ 17 февраля 2012

Я пытаюсь определить, как сопоставить маршрут для / News / 5 моему контроллеру новостей.

Это мой NewsController:

public class NewsController : BaseController
{
    //
    // GET: /News

    public ActionResult Index(int id)
    {
        return View();
    }

}

Это мое правило Global.asax.cs:

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

Я пытаюсь перейти в / News / 5, но я получаю сообщение об ошибке "ресурс не найден", однако при переходе в / News / Index / 5 это работает?

Я пытался просто {controller}/{id}, но это только что вызвало ту же проблему.

Спасибо!

Ответы [ 2 ]

18 голосов
/ 17 февраля 2012

Ваш {controller}/{id} маршрут был верным, но вы, вероятно, зарегистрировали его ПОСЛЕ другого маршрута.В списке маршрутов поиск выполняется сверху вниз, и первое найденное совпадение выигрывает.

Чтобы помочь в маршрутизации, я бы предложил создать ограничения маршрута для этого, чтобы гарантировать, что # 1 контроллер существует, а # 2 - {id}номер.

См. эту статью

В основном:

 routes.MapRoute( 
        "Index Action", // Route name 
        "{controller}/{id}", // URL with parameters EDIT: forgot starting "
        new { controller = "News", action = "Index" },
        new {id= @"\d+" }
    ); 
6 голосов
/ 17 февраля 2012

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

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


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