Dot-Net
停止為不存在的控制器引發異常
好的,所以我被這個問題難住了。我已經看到了很多應該解決這個問題的東西,但是我沒有得到一個可以滿足我要求的解決方案。
我正在使用 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。沒有什麼能阻止例外。再次感謝任何幫助!
創建一個 RouteConstraint,檢查控制器是否存在(事實上,掃描所有可能的控制器並記憶體它,你知道我的意思)並將它添加到你的標準路由。
因此,當您向壞控制器發出請求時,正常路由不會接受它。但隨後被包羅萬象-> 404 路線接受…
連接一個自定義控制器工廠,當它無法找到請求的控制器時,它可以執行您想要的功能。只是幾行程式碼,沒什麼太痛苦的。
您可以推出自己的控制器工廠,或使用眾多庫之一作為起點。您將擁有一個實現 IControllerFactory 的類,並且 CreateController() 函式內部將是您的自定義邏輯。