2008-11-25 11 views
2

Dans mon routage, je voudrais avoir quelque chose comme gestionnaire de route non trouvé.Route par défaut pour toutes les situations extrêmes

Par exemple j'ai créé une cartographie comme

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

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

mais quand utilisateur insère traitent quelque chose comme/une/deux/trois/quatre/bla/bla, il sera mis en mémoire cache avec la cartographie Catchall.

Mais lorsque l'utilisateur insère quelque chose qui doit correspondre avec le mappage par défaut, (comme/une/deux /, mais ce contrôleur ou une action ne sont pas mises en œuvre) je voudrais que la cartographie Catchall accepterait cette demande, parce que tous les autres les mappages ont échoué. Mais au lieu de cela, j'ai une erreur. Dois-je redéfinir certains gestionnaires de mappage pour intercepter l'exception si le contrôleur ou l'action obtient une exception?

+0

Jamais compris? – yaegerbomb

Répondre

0

Le problème ici est que ce n'est pas la responsabilité de la Route de s'assurer que "one/two" correspond à un fichier . Cette responsabilité incombe à ViewEngine. Puisque "un/deux" est valide route, il sera choisi.

Si vous voulez gérer l'erreur d'un itinéraire invalide, ce que je vous recommande est simplement utiliser la "page" de gestion des erreurs intégrée pour afficher tout message que vous auriez fait dans le Catchall.

0

Je ne pense pas que ce soit la meilleure solution, mais vous pouvez toujours être plus précis sur vos routes:

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

... répéter pour le reste de vos actions ...

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

Cela tenterait de faire correspondre une action directe, et si aucune action n'est trouvée, passez ce qui serait normalement la partie {action} de la route par défaut à l'action 'ArticleSearcher' en tant que paramètre de chaîne d'article. L'inconvénient est de devoir créer explicitement chaque contrôleur/route d'action.

Questions connexes