2009-07-22 8 views
1

Y a-t-il un moyen d'intercepter un événement "contrôleur non trouvé" du cadre? Peut-être que cet événement n'existe pas. Mais si je prends juste un URL pour vous jeter au système de routage du cadre comme:Contrôleurs ASP.NET MVC et extension du cadre

http://localhost:54321/foobar

Le résultat final sans modification est une erreur 404.

Est-ce la façon la plus simple d'attraper cela via une ControllerFactory personnalisée? Puis gérer à partir de là.

MISE À JOUR: Je suis à la recherche d'un moyen d'attraper et de gérer plus tôt dans le flux de demandes. Pas au niveau du contrôleur. Voir les commentaires à la réponse de Jon Galloway.

Répondre

1

J'ajouterais une route catchall à la fin de vos déclarations de route et la gérerais là.

/* all your other routes here */ 
routes.MapRoute("NotHandled", 
    "{*url}", 
    new { controller = "NotFound", action = "Index" }); 
+1

Est-ce que « NotHandled » une chaîne magique qui est reconnu par le cadre? –

+1

Non. C'est juste un nom. La "magie" est que c'est une URL catchall qui n'a été attrapée par rien d'autre. –

+1

Droit, vous pourriez le nommer "Singe" si vous voulez. La route {* yournamehere} correspondra à n'importe quoi. C'est pourquoi il est important de l'énumérer en dernier, sinon cela empêchera les autres routes de correspondre. –

1

Je pense qu'il y a plus de problèmes ici que cela ne se voit. Que se passe-t-il lorsqu'un utilisateur invoque une action valide sur un contrôleur valide et que la ressource demandée (produit, article, sous-catégorie, etc.) n'existe pas? En outre, pour les moteurs de recherche, l'URL non valide doit renvoyer une erreur 404 vraie.

Voir le post suivant un examen détaillé de ces questions:

Stratégies pour 404 erreurs basées sur les ressources dans ASP.NET MVC
http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/

+0

En fait un contrôleur non trouvé serait remis au "système secondaire" si le système secondaire ne pouvait pas le gérer ... alors vous avez raison il devrait retourner un 404. Une action manquante sur un contrôleur - aussi 404 – BuddyJoe

Questions connexes