Domanda

Ok, quindi sono perplesso su questo tema. Ho visto un sacco di cose che dovrebbero risolvere il problema, ma non sto ottenendo una risoluzione che può soddisfare le mie esigenze.

Sto usando ELMAH per accedere eccezioni e sto ottenendo questo eccezione quando un URL con il controller non valido o il controller corretta e l'azione non valida.

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)

Voglio fermare questa eccezione da essere gettato. Sto usando gli errori personalizzati e funzionano bene, come l'applicazione invierà alla mia pagina di errore 404 personalizzata. Tuttavia, l'eccezione viene comunque registrato.

Ho l'attributo [HandleError] decorare tutti i controller. È possibile? E se è così Gradirei qualsiasi aiuto.

ho cercato, l'impostazione di un percorso finale che reindirizza , ma si sta abbinando un percorso precedente a quella per qualsiasi motivo. Ho cercato di usare un httpModule , e di compensazione in caso Application_Error del file Global.asax. Nulla si ferma che le eccezioni.

Grazie ancora per tutto l'aiuto!

È stato utile?

Soluzione 3

È stato probabilmente non l'inoltro il mio problema correttamente, dopo tonnellate di scavare intorno questa eccezione dovrebbe essere gettato. La risposta è di escludere tali eccezioni ELMAH, in base a questo articolo .

  

Per impostazione predefinita, ELMAH registra i dettagli di   ogni eccezione non gestita, tra cui   404 e altri errori HTTP. Puoi   istruire ELMAH di ignorare questi o   altri tipi di errori che utilizzano errore   filtraggio.

Altri suggerimenti

Crea un RouteConstraint, che controlla se esiste il controller (di fatto, scansiona tutti i possibili controllori di inizio e le cache, sai cosa intendo) e aggiungerlo al percorso standard.

così, quando si allora avete una richiesta per un cattivo controllo, non è accettata dal normale percorso. ma poi accettata dal catchall -> 404 route ...

Wire una fabbrica di controllo personalizzato in grado di eseguire le vostre caratteristiche desiderate quando non riesce a individuare il controller richiesto. E 'solo un paio di righe di codice, niente di troppo doloroso.

È possibile ruotare la propria fabbrica di controllo, o utilizzare una delle molte librerie come punto di partenza. Avrai una classe che implementa IControllerFactory e all'interno della funzione CreateController () sarà la vostra logica personalizzata.

Io uso di DSO ITCloud Contrib . Niente di tutto questo {controller}/{action} parametri generici. UrlRoute esplicito attributi per ciascun metodo d'azione. Mi piace vedere i vincoli dei parametri direttamente sopra il metodo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top