HttpHandler не работает в веб-приложении ASP.NET MVC3 - PullRequest
4 голосов
/ 01 апреля 2011

Недавно я взял существующее приложение веб-форм ASP.NET 3.5, которое было обновлено до .NET 4 в прошлом году (и работало нормально), и настроил его также на запуск ASP.NET MVC3 после публикации в блоге Скотта Хансельмана: Интеграция ASP.NET MVC 3 в существующие обновленные приложения ASP.NET 4 Web Forms .Он работает хорошо, и я успешно начал вводить представления, основанные на Razor, и существующие aspx страницы продолжают работать.

Однако единственное, что перестало работать, - это пользовательский HttpHandler (наш балансировщик нагрузкинажимает на конкретный адрес, чтобы убедиться, что приложение доступно - обработчик для этого адреса).Web.config всегда объявлял обработчик в разделе system.web следующим образом:

<httpHandlers>
  <add verb="*" path="system/heartbeat.aspx"
    type="My.Monitor.HttpHandlers.LoadBalancerHandler, My.Monitor"/>
</httpHandlers>

Теперь мы тестируем post-MVC3, и я получаю исключение, которое гласит:

Контроллер для пути '/system/heartbeat.aspx' не найден или не реализует IController.

Я определил метод RegisterRoutes в моем Global.asax и этот методвызывается с Application_StartRegisterRoutes я получил IgnoreRoute декларации из блога Хансельмана:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

, которые, как я думал, должны были помешать системе маршрутизации принимать что-либо с расширением .aspx.

Я могу воспроизвести проблему в VS2010 при отладке, а среда развертывания работает под управлением IIS 6.

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

1 Ответ

9 голосов
/ 01 апреля 2011

Попробуй так:

routes.IgnoreRoute("system/heartbeat.aspx");
...