Como remover 'Detalhes' no MVC URL roteamento, mas deixar outras ações intacta?
-
05-07-2019 - |
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?
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.