Pergunta

Eu estou tentando identificar como mapear uma rota para / Notícias / 5 à minha controlador de notícias.

Este é o meu NewsController:

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

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

}

Esta é a minha regra Global.asax.cs:

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

Eu tento ir para / Notícias / 5, mas eu recebo um erro de recurso não encontrado, no entanto, quando vai / Notícias / Index / 5 funciona?

Eu tentei apenas {controller}/{id} mas que apenas produziu o mesmo problema.

Obrigado!

Foi útil?

Solução

A sua rota {controller}/{id} foi correta, mas você problaby registrou após a outra rota. Na lista rota ele procura cima para baixo e a primeira partida que encontra vitórias.

para ajudar a orientar o roteamento eu sugeriria a criação de rotas restrições para isso para garantir que # 1 existe o controlador e # 2 a {id} é um número.

este artigo

Principalmente:

 routes.MapRoute( 
        "Index Action", // Route name 
        "{controller}/{id}", // URL with parameters EDIT: forgot starting "
        new { controller = "News", action = "Index" },
        new {id= @"\d+" }
    ); 

Outras dicas

Você precisa ter certeza de sua nova rota é antes de sua rota padrão, assim:

    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
    );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top