代码之家  ›  专栏  ›  技术社区  ›  Dustin Laine

停止为不存在的控制器引发异常

  •  9
  • Dustin Laine  · 技术社区  · 14 年前

    好吧,所以我在这个问题上很困惑。我已经看到了很多应该解决这个问题的方法,但是我没有得到一个能够满足我要求的方法。

    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)
    

    我想阻止抛出此异常。我使用自定义错误,他们工作良好,因为应用程序将发送到我的自定义404错误页。但是,仍然会记录异常。

    我有 [HandleError] 装饰所有控制器的属性。这可能吗?如果是这样的话,我会很感激你的帮助。

    final route that redirects ,但无论出于什么原因,它都会匹配之前的路径。我试图使用 httpModule Application_Error Global.asax 文件。没有什么能阻止这种例外。

    再次感谢您的帮助!

    4 回复  |  直到 7 年前
        1
  •  4
  •   cRichter    14 年前

    把它加到你的标准路线上。

    但后来被catchall接受了->404路由。。。

        2
  •  2
  •   a7drew    14 年前

    您可以运行自己的控制器工厂,或者使用许多库中的一个作为起点。您将拥有一个实现IControllerFactory的类,在CreateController()函数中将是您的自定义逻辑。

        3
  •  1
  •   Dustin Laine    14 年前

    article

    默认情况下,ELMAH记录 所有未处理的异常,包括 404和其他HTTP错误。你可以 指示ELMAH忽略这些或 过滤。

        4
  •  0
  •   Community CDub    7 年前

    我用 DSO's ITCloud Contrib {controller}/{action} UrlRoute 每个动作方法的属性。我喜欢在方法的正上方看到参数约束。