Question

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 ouvrir une session et je reçois des exceptions cette exception quand une URL avec le contrôleur invalide ou contrôleur approprié et action non valide.

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)

Je veux mettre fin à cette exception d'être jeté. J'utilise des erreurs de mesure et ils fonctionnent très bien, comme l'application envoie à mon 404 page d'erreur. Toutefois, l'exception obtient toujours connecté.

J'ai l'attribut [HandleError] décoration tous les contrôleurs. Est-ce possible? Et si oui, je vous serais reconnaissant de toute aide.

J'ai essayé, établir un itinéraire final qui réoriente , mais il est correspondant à une voie avant que, pour une raison quelconque. J'ai essayé d'utiliser un httpModule et compensation en cas de Application_Error du fichier Global.asax. Rien ne s'arrête que les exceptions.

Merci encore pour toute aide!

Était-ce utile?

La solution 3

était probablement pas relayer mon problème correctement, après des tonnes de creuser autour de cette exception est censé être jeté. La réponse est d'exclure ces exceptions ELMAH, selon cette article .

  

Par défaut, ELMAH enregistre les détails de   toute exception non gérée, y compris   404 et d'autres erreurs HTTP. Vous pouvez   instruire ELMAH d'ignorer ceux-ci ou   d'autres types d'erreurs en utilisant l'erreur   filtrer.

Autres conseils

Créer un RouteConstraint, qui vérifie si le contrôleur existe (en fait, scanne tous les contrôleurs possibles en début et met en cache, vous savez ce que je veux dire) et l'ajouter à votre itinéraire standard.

, quand vous avez alors une requête à un mauvais contrôleur, il est pas accepté par la voie normale. mais accepté par le passe-partout -> 404 itinéraire ...

fil une usine de contrôleur personnalisé qui peut exécuter vos fonctions souhaitées quand il ne parvient pas à localiser le contrôleur demandé. Il est juste 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 CreateController () sera votre logique personnalisée.

scroll top