Pregunta

Ok, así que estoy perplejo sobre este tema. He visto un montón de cosas que se supone que resolver este problema, pero no me conseguir una resolución que puede satisfacer mis necesidades.

Estoy utilizando ELMAH para registrar excepciones y estoy recibiendo esta excepción cuando una URL con el controlador no válida o un controlador adecuado y la acción válida.

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)

Quiero poner fin a esta excepción sea lanzado. Estoy utilizando errores personalizados y funcionan bien, ya que la aplicación enviará a mi página de error 404 personalizada. Sin embargo, la excepción todavía se registra.

tiene el atributo [HandleError] la decoración de todos los controladores. es posible? Y si lo que agradecería cualquier ayuda.

He tratado, el establecimiento de una ruta final que redirige , pero está emparejando una ruta anterior a que por cualquier razón. He intentado utilizar un httpModule y claro en el caso del archivo Application_Error Global.asax. Nada impide que las excepciones.

Gracias de nuevo por cualquier ayuda!

¿Fue útil?

Solución 3

Fue probablemente no retransmitir mi problema adecuadamente, después de un montón de cavar en torno a esta excepción se supone para ser lanzado. La respuesta es excluir las excepciones de ELMAH, según esta artículo .

  

Por defecto, ELMAH registra los detalles de   cada excepción no controlada, incluyendo   404 y otros errores de HTTP. Usted puede   instruir a ELMAH hacer caso omiso de estos o   otros tipos de errores utilizando error   filtrar.

Otros consejos

Crear un RouteConstraint, que comprueba si existe el controlador (de hecho, analiza todos los controladores posibles en principio y lo almacena en caché, ya sabes a qué me refiero) y añadirlo a la ruta estándar.

Por lo tanto, cuando usted entonces tiene una petición a un controlador mal, no es aceptada por la ruta normal. pero luego aceptado por el cajón de sastre -> 404 ruta ...

Cable de hasta una fábrica de controlador personalizado que puede ejecutar sus funciones deseadas cuando no puede localizar el controlador solicitado. Está a sólo unas pocas líneas de código, nada demasiado doloroso.

Puede rodar su propia fábrica controlador, o utilizar una de las muchas bibliotecas como punto de partida. Vas a tener una clase que implementa IControllerFactory y dentro de la función CreateController () será su lógica personalizada.

DSO ITCloud Contrib . Nada de eso {controller}/{action} parámetros genéricos. atribuye UrlRoute explícita para cada método de acción. Me gusta ver las limitaciones de los parámetros directamente sobre el método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top