2008-11-03 6 views
4

J'utilise la carte de structure comme la devanture MVC par Rob Conery fait et j'ai un AdminController et donc pour y accéder, je suffit de taper:erreur StructureMap lorsque le contrôleur invalide

website/Admin/action 

si je manque épeler le contrôleur nom j'obtiens l'erreur ci-dessous:

Détails d'exception: System.ArgumentNullException: La valeur ne peut pas être null. Nom du paramètre: touche

Il erreur se produit sur cette ligne:

Controller controller = ObjectFactory.GetInstance(controllerType) as Controller; 

Est-ce que quelqu'un a des idées sur la façon dont je peux gérer cette erreur ou lui permettent pas de se produire du tout et peut-être GOTO juste une page 404 ??

Vive à l'avance

Répondre

6

Le problème est que s'il n'y a pas de contrôleur avec le nom du type attendu (si les types d'utilisateurs « AMDIN » la classe de base ControllerFactory recherchera « AMDIN Controller » et ne trouvera pas, mais appellera toujours votre méthode overrid). Dans ce cas, la variable controllerType sera null. Donc, vous pouvez simplement vérifier pour null avant la ligne que vous avez cité, puis (si elle est nulle) soit:

A) Mettre en oeuvre une correction d'orthographe comme celui cfeduke suggère

ou B) Il suffit de jeter un HttpException avec le code de statut 404 (que devrait cause l'erreur 404 que vous recherchez).

REMARQUE: Si vous faites une correction d'orthographe, vous devriez probablement faire un Response.Redirect vers la nouvelle URL, plutôt que de charger silencieusement le contrôleur droit, de cette façon les changements de la barre d'adresse pour refléter la correction d'orthographe

1

Vous avez un couple différentes options (ou si vous voulez, deux choses que vous pouvez combiner pour une solution). Pour supprimer certains des problèmes potentiels entre la chaise et la barre d'adresse, vous pouvez utiliser le nouveau cadre de routage pour potentiellement capturer certaines fautes d'orthographe et les rediriger vers l'URL attendue (et/ou ajouter des itinéraires pour ce que vous croyez les fautes d'orthographe ou demandes courantes). sera). Ceci, cependant, n'est pas une solution qui résoudra complètement le problème, donc vous aurez besoin de look in to implementing custom error pages pour votre application.