Search code examples
.netasp.net-mvc-2httpexception

Stop exception from being thrown for non-existent controller


Ok, so I am stumped on this issue. I have seen a lot of things that are supposed to resolve this issue, but I am not getting a resolution that can fulfill my requirements.

I am using ELMAH to log exceptions and am getting this exception when either a URL with invalid controller or proper controller and invalid action.

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)

I want to stop this exception from being thrown. I am using custom errors and they work fine, as the application will send to my custom 404 error page. However, the exception still gets logged.

I have the [HandleError] attribute decorating all controllers. Is this possible? And if so I would appreciate any help.

I have tried, setting a final route that redirects, but it is matching a route previous to that for whatever reason. I have attempted to use a httpModule, and clearing in the Application_Error event of the Global.asax file. Nothing is stopping that exceptions.

Thanks again for any help!


Solution

  • Was probably not relaying my issue properly, after tons of digging around this exception is supposed to be thrown. The answer is to exclude those exceptions from ELMAH, according to this article.

    By default, ELMAH logs the details of every unhandled exception, including 404 and other HTTP errors. You can instruct ELMAH to ignore these or other types of errors using error filtering.