好的,所以我在这个问题上很难过。我已经看到很多应该解决这个问题的事情,但是我没有得到能够满足我要求的决议。

我正在使用Elmah来记录异常,并且当带有无效控制器的URL或适当的控制器和无效的操作时,我会得到此异常。

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] 属性装饰所有控制器。这可能吗?如果是这样,我将感谢任何帮助。

我尝试过,设置 重定向的最终路线, ,但由于任何原因,它都与此路线相匹配。我试图使用 httpmodule, 并清除 Application_Error 事件 Global.asax 文件。没有什么可以阻止例外。

再次感谢任何帮助!

有帮助吗?

解决方案 3

在应该挖掘这个例外之后,可能没有正确地传达我的问题。答案是根据这一点将这些例外排除在Elmah之外 文章.

默认情况下,Elmah记录了每个未经处理的异常的详细信息,包括404和其他HTTP错误。您可以指示Elmah使用错误过滤忽略这些或其他类型的错误。

其他提示

创建一个路由,该路由会检查控制器是否存在(实际上,在开始时扫描所有可能的控制器并缓存它,您知道我的意思是什么)并将其添加到您的标准路线中。

因此,当您对不良控制器的请求请求时,正常路线不接受。但是随后被CATCHALL接受 - > 404路线...

连接一个自定义控制器工厂,该工厂在无法找到所需的控制器时可以执行所需的功能。这只是几行代码,没有什么太痛苦了。

您可以滚动自己的控制器工厂,或将许多库之一用作起点。您将拥有一个实现IconTrollerFactory的类,并且在CreateController()函数内部将是您的自定义逻辑。

我用 DSO的itcloud贡献. 。都不是 {controller}/{action} 通用参数。显式 UrlRoute 每个动作方法的属性。我喜欢在方法上方看到参数约束。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top