Как проверить, загружен ли IHttpHandler? - PullRequest
2 голосов
/ 28 ноября 2011

У меня есть global.asax, и я хотел бы проверить в методе Application_Start, зарегистрировано ли IHttpHandler с определенным именем. Как я могу это сделать?

Обработчик может быть объявлен в собственном приложении web.config или в одном из других виртуальных родительских каталогов или в файле machine.config.

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

Мне неизвестен публичный способ сделать то, что вы просите.

Я думаю, что вам нужен код HttpContext.Current.ApplicationInstance.GetHandlerMapping (), .MapHttpHandler () или .MapIntegratedHttpHandler (), но они являются частными или внутренними методами. Однако вы должны иметь возможность использовать рефлексию для их вызова.

Альтернативой может быть тестирование методом проб и ошибок (попробуйте запросить цель, которая должна быть перенаправлена ​​ожидаемому обработчику, и посмотрите, что происходит в нескольких местах, например, в событии MapRequestHandler в HttpModule - но Я думаю, что Application_Start слишком рано для этого.

0 голосов
/ 28 ноября 2011

Считайте файл web.config, используя WebConfigurationManager.OpenWebConfiguration .Из-за иерархии и наследования файлов конфигурации ASP.NET все эти разделы конфигурации, которые добавляются в machine.config, доступны для вашего веб-приложения, поэтому вам нужно прочитать локальный файл web.config.

Configuration config = WebConfigurationManager.OpenWebConfiguration("~/web.config");
HttpHandlersSection section = (HttpHandlersSection)config.GetSection("system.web/httpHandlers");

GridView1.DataSource = section.Handlers;
GridView1.DataBind();
...