Pergunta

No meu roteamento, gostaria de ter algo como não encontrar o manipulador de rota.

Por exemplo, eu criei um mapeamento como

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

routes.MapRoute(
                     "Catchall",
                     "{*catchall}",
                     new { controller = "Home", action = "Lost" }
             );

Mas quando as inserções do usuário abordam algo como/um/dois/três/quatro/bla/bla, ele será armazenado em cache com o mapeamento de captura.

Mas quando o usuário insere algo que deve corresponder ao mapeamento padrão (como/um/dois/, mas esse controlador ou ação não é implementado), eu gostaria que o mapeamento do captura aceitaria essa solicitação, porque todos os outros mapeamentos falharam. Mas, em vez disso, recebo um erro.

Devo substituir alguns manipuladores de mapeamento para capturar a exceção se o controlador ou ação obtiver uma exceção?

Foi útil?

Solução

A questão aqui é que não é responsabilidade da rota garantir que "um/dois" mapas para um Arquivo. Essa responsabilidade cai para o ViewEngine. Como "um/dois" é válido rota, será escolhido.

Se você deseja lidar com o erro de uma rota inválida, o que eu recomendaria é simplesmente usar a manutenção de erros incorporada para exibir qualquer mensagem que você teria feito no captura.

Outras dicas

Eu não acho que esta seja a melhor solução, mas você sempre pode ser mais específico em suas rotas:

routes.MapRoute(
    "home and action",
    "home/index/{id}",
    new { controller = "Home", action = "Index", id="" }
);

... repita para o resto de suas ações ...

routes.MapRoute(
    "article catch all",
    "home/{article}",
    new { controller = "Home", action = "ArticleSearcher", article="" }
);

Isso tentaria corresponder a uma ação direta e, se nenhuma ação for encontrada, passe o que normalmente seria a parte {Action} da rota padrão para a ação 'Articlesearcher' como um parâmetro de string de artigo.

A desvantagem é ter que criar explicitamente cada controlador/rota de ação.

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