#c# #identityserver4
#c# #identityserver4
Вопрос:
Я пытаюсь выйти из IdentityServer через библиотеки OidcClient, но решение, которое у меня есть сейчас, требует, чтобы у меня было пустое диалоговое окно, которое появляется в течение 5 секунд, прежде чем я смогу выйти. Это очень некрасиво, и должен быть лучший способ сделать это.
В официальном примере для предотвращения всплывающего окна формы используется событие «BeforeNavigate2», но это недоступно без включения некоторого импорта COM и расширения управления WebBrowser, как показано здесь, и это то, чего я также пытаюсь избежать.
Я уже пытался заменить ShowDialog семафором, но если я буду ждать на нем, я получу взаимоблокировку, потому что ожидающий поток тот же, который должен запускать событие «Navigated». Я также пытался заменить навигацию браузера HttpClient, но тогда я теряю функциональность перенаправления и удаления файлов cookie, которые веб-браузер уже обрабатывает
Это мой код:
public override Task<BrowserResult> InvokeAsync(BrowserOptions options) {
BrowserResult result = null;
var t = new Thread(() => result = Run());
//needed because the browser UserControl will throw an exception if not inside a STA thread
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
return System.Threading.Tasks.Task.FromResult(result);
}
private BrowserResult Run(){
form = new Form { Name = "WebAuthentication", Text = formCaption, Width =
formWidth, Height = formHeight, ShowIcon = false };
browser = new WebBrowser { Dock = DockStyle.Fill };
form.Controls.Add(browser);
browser.Navigated = (sender, args) => {
form.Close();
};
browser.Navigate(options.StartUrl);
form.ShowDialog();
return new BrowserResult { ResultType = BrowserResultType.Success };
}
Что я здесь делаю, так это использую ShowDialog для блокирования выполнения до тех пор, пока веб-запрос не будет полностью заполнен, громко блокируя поток, а затем освобождая его с помощью формы.Закрыть().
В идеале, выход из системы должен занимать не более пары секунд, и никакие окна не должны появляться.
Приветствуется любая помощь.
Комментарии:
1. у меня нет ответа, только идея: почему бы не попробовать другой элемент управления веб-браузером, такой как github.com/cefsharp/CefSharp это может быть проще, чем играть со встроенной в Windows magic