10
votes

Exception d'arrêt d'être jeté pour un contrôleur inexistant

Ok, donc je suis perplexe sur cette question. J'ai vu beaucoup de choses qui sont censées résoudre ce problème, mais je ne reçois pas une résolution qui peut répondre à mes besoins.

J'utilise ELMAH pour connecter des exceptions et me fais cette exception quand une URL avec le contrôleur invalide ou un contrôleur approprié et action non valide. p>

System.Web.HttpException: The controller for path '/BadController' was not found or does not implement IController.
   at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
   at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
   at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


2 commentaires

Qu'est-ce qui est mauvais à ce sujet en étant enregistré? Régulier 404 sont par défaut également connectés à Apache, par exemple.


Ce n'est pas tellement la journalisation, mais l'exception que j'essaie d'écraser. Je veux une erreur 404, car il devrait être un 404. Cependant, ma situation idéale pour que le .NET CustomErrors jette un 404 et aucune exception soit lancée.


4 Réponses :


2
votes

Wire up d'une usine de contrôleur personnalisée pouvant exécuter les fonctions souhaitées lorsqu'il ne parvient pas à localiser le contrôleur demandé. Ce n'est que quelques lignes de code, rien de trop douloureux.

Vous pouvez rouler votre propre usine de contrôleur ou utiliser l'une des nombreuses bibliothèques comme point de départ. Vous aurez une classe qui implémente IcontrollerFactory et à l'intérieur de la fonction CréeController () sera votre logique personnalisée.


0 commentaires

0
votes

J'utilise DSO's ITCloud StitT . Aucun de ce {contrôleur} / {action} paramètres génériques. Explicit urlroute attributs pour chaque méthode d'action. J'aime voir les contraintes de paramètres directement au-dessus de la méthode.


0 commentaires

4
votes

Créer une source de routinage, qui vérifie si le contrôleur existe (en fait, scanne tous les contrôleurs possibles au début et en caches, vous savez ce que je veux dire) et ajoutez-le à votre itinéraire standard.

Donc, lorsque vous avez ensuite une demande à un mauvais contrôleur, il n'est pas accepté par la route normale. Mais ensuite accepté par la CATCHALL -> 404 Route ...


0 commentaires

1
votes

n'était probablement pas relayer mon problème correctement, après que des tonnes de creuser autour de cette exception soient supposées être jetées. La réponse est d'exclure ces exceptions d'Elmah, selon cette Article .

Par défaut, Elmah enregistre les détails de chaque exception non heurtée, y compris 404 et d'autres erreurs HTTP. Vous pouvez instruire Elmah d'ignorer ces ou Autres types d'erreurs utilisant une erreur Filtrage.


1 commentaires

Cet article avait exactement Ce que je cherchais, loger l'erreur mais ne m'envoie pas de courrier électronique, parfait!