Pergunta

Eu gostaria de criar uma rota para um controlador que tem as operações CRUD normais, mas gostaria que a acção Os detalhes não mostrar 'Detalhes' na URL. Stackoverflow parece ter este tipo de roteamento configurado:

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

Usando essa analogia, meus rotas atualmente parecido:

http://stackoverflow.com/questions/Details/999999/

Ao adicionar o seguinte rota que eu era capaz de conseguir Details removidos:

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

No entanto, puxando para cima outras ações no controlador (por exemplo /questions/new para este exemplo) está reclamando que o ID não pode ser analisado.

Existe uma maneira de configurar as rotas para que eu não tenho que inserir manualmente todas as outras ações ( "itens / criar" MapRoute, "itens / delete", etc.) manualmente no Global.asax. cs? I, essencialmente, gostaria de ter uma segunda rota como:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

... e ter o encaminhamento de uso do motor rota Q1 se {id} corresponder a um número inteiro, e {action} se é uma string. Isso é possível?

Foi útil?

Solução

Se você colocar uma restrição rota no primeiro para que o campo id só pode ser um inteiro, então eu acredito que qualquer outra ação vai cair para o padrão.

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

Tudo o resto deve ser tratado pela rota padrão. Assim, "perguntas / 3553" teria atingido um presente, mas "perguntas / ask" não corresponde. Você provavelmente vai querer colocar a rota mais específica pela primeira vez em seu arquivo Global.asax.cs.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top