Остановить исключение от брошенного для несуществующего контроллера

StackOverflow https://stackoverflow.com/questions/3122021

Вопрос

Хорошо, поэтому я озадачивал этот вопрос. Я видел много вещей, которые предполагают решить эту проблему, но я не получаю резолюцию, которая может выполнять свои требования.

Я использую 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 регистрирует детали каждого необразованного исключения, включая 404 и другие ошибки HTTP. Вы можете поручить Elmah игнорировать эти или другие типы ошибок, используя фильтрацию ошибок.

Другие советы

Создайте RouteConstraint, которая проверяет, существует ли контроллер (на самом деле сканирует все возможные контроллеры в начале и кэширует его, вы знаете, что я имею в виду) и добавить его на свой стандартный маршрут.

Итак, когда вы тогда у вас есть запрос к плохому контроллеру, он не принимается нормальным маршрутом. Но тогда принят Chavall -> 404 маршрута ...

Проволоки на заказ на заказ фабрика контроллера, который может выполнить желаемые функции, когда он не сможет найти запрошенный контроллер. Это всего лишь несколько строк кода, ничего не болезненного.

Вы можете свернуть свой собственный завод контроллера или использовать одну из многих библиотек в качестве отправной точки. У вас будет класс, который реализует IcontrollerFactory и внутри функции CreateController () будет вашей пользовательской логикой.

я использую ITCloud DSO внесет. Отказ Ничего подобного {controller}/{action} Общие параметры. Явный UrlRoute атрибуты для каждого метода действия. Мне нравится видеть ограничения параметра прямо над способом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top