Согласно этой статье , я расширил класс System.Windows.Forms.WebBrowser
для реализации пользовательской обработки ошибок. В основном это работает.
Проблема возникает, когда браузер получает ответ «401 Unauthorized». При таком ответе элемент управления WebBrowser
отображает стандартное диалоговое окно «Имя пользователя / пароль». Событие NavigateError
не запускается до тех пор, пока это диалоговое окно не будет отменено.
Так, что я могу сделать, чтобы захватить ответ 401 и обработать его по-своему?
Я предполагал, что смогу что-то сделать, например, то, что я сделаю, чтобы запечатлеть событие NavigateError
и справиться с этим по-своему, но я ничего не видел.
Редактировать: Решение найдено!
Важные шаги:
1. Элемент управления WebBrowser должен сначала перейти на незащищенную страницу («about: blank» - типичный используемый URL), чтобы избежать KB 320153
2. Хост для элемента управления WebBrowser должен реализовывать IOleClientSite
, IServiceProvider
и IAuthenticate
.
3. IServiceProvider.QueryService
должен обрабатывать IAuthenticate
запрос на обслуживание с реализацией IAuthenticate
, все остальные запросы на обслуживание могут обрабатываться с помощью ответа INET_E_DEFAULT_ACTION
.
4. IAuthenticate.Authenticate
- ваш пользовательский обработчик аутентификации.