Dot-Net

停止為不存在的控制器引發異常

  • October 10, 2017

好的,所以我被這個問題難住了。我已經看到了很多應該解決這個問題的東西,但是我沒有得到一個可以滿足我要求的解決方案。

我正在使用 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]裝飾所有控制器的屬性。這可能嗎?如果是這樣,我將不勝感激。

我嘗試過設置重定向的最終路由,但無論出於何種原因,它都匹配之前的路由。我試圖使用httpModuleApplication_Error ,並在文件的情況下清除Global.asax。沒有什麼能阻止例外。

再次感謝任何幫助!

創建一個 RouteConstraint,檢查控制器是否存在(事實上,掃描所有可能的控制器並記憶體它,你知道我的意思)並將它添加到你的標準路由。

因此,當您向壞控制器發出請求時,正常路由不會接受它。但隨後被包羅萬象-> 404 路線接受…

連接一個自定義控制器工廠,當它無法找到請求的控制器時,它可以執行您想要的功能。只是幾行程式碼,沒什麼太痛苦的。

您可以推出自己的控制器工廠,或使用眾多庫之一作為起點。您將擁有一個實現 IControllerFactory 的類,並且 CreateController() 函式內部將是您的自定義邏輯。

引用自:https://stackoverflow.com/questions/3122021