Frage

Ok, so bin ich zu diesem Thema ratlos. Ich habe eine Menge Dinge gesehen, die angeblich um dieses Problem zu lösen, aber ich bin nicht eine Auflösung bekommen, die meine Anforderungen erfüllen kann.

Ich bin mit ELMAH Ausnahmen anmelden und bin immer diese Ausnahme, wenn entweder eine URL mit ungültigen Controller oder die richtigen Steuerung und ungültiger Aktion.

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)

Ich möchte diese Ausnahme stoppen geworfen. Ich verwende individuelle Fehler und sie funktionieren, wie die Anwendung auf meine benutzerdefinierte 404-Fehlerseite senden. Allerdings wird die Ausnahme noch angemeldet.

Ich habe das [HandleError] Attribut alle Controller zu dekorieren. Ist das möglich? Und wenn ja ich Hilfe schätzen würde.

Ich habe versucht, ein Endstrecke Einstellung, die Umleitungen , aber es ist aus irgendeinem Grund eine Route vorher ist passend. Ich habe versucht, ein httpmodule und Lichtung im Application_Error Ereignisse der Global.asax Datei. Nichts hindert, dass Ausnahmen.

Nochmals vielen Dank für jede Hilfe!

War es hilfreich?

Lösung 3

war wahrscheinlich mein Problem nicht richtig Relaying, nachdem Tonnen Graben diese Ausnahme um soll geworfen werden. Die Antwort ist diese Ausnahmen von ELMAH auszuschließen, nach diesem Artikel .

  

Standardmäßig protokolliert ELMAH die Details   jede nicht behandelte Ausnahme, einschließlich   404 und andere HTTP-Fehler. Du kannst   anweisen ELMAH zu ignorieren diese oder   andere Arten von Fehlern unter Verwendung von Fehlern   Filterung.

Andere Tipps

Erstellen Sie eine RouteConstraint, das überprüft, ob der Controller vorhanden ist (in der Tat, durchsucht alle möglichen Controller in Anfang und Caches es, weißt du was ich meine) und fügen Sie ihn in Ihre Standardroute.

Wenn Sie also dann eine Anfrage an einen schlechten Controller haben, ist es nicht die normale Route akzeptiert. aber dann von der catchall akzeptiert -> 404 route ...

verdrahten eine benutzerdefinierte Controller Fabrik, die gewünschten Funktionen ausführen kann, wenn er die angeforderte Controller finden ausfällt. Es ist nur ein paar Zeilen Code, nichts zu schmerzhaft.

Sie können Ihre eigenen Controller Fabrik rollen, oder als Ausgangspunkt einer der vielen Bibliotheken. Sie werden eine Klasse, die implementiert IControllerFactory und innerhalb der CreateController () Funktion, um Ihre eigene Logik sein wird.

DSOs ITCloud Contrib verwenden. Nichts davon {controller}/{action} allgemeine Parameter. Explizite UrlRoute Attribute für jede Aktionsmethode. Ich mag die Parametereinschränkungen direkt über dem Verfahren zu sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top