我想要实现的目标:
我想在控制台应用和Internet Explorer之间进行交互。我正在启动OAuth工作流程,该工作流程将用户名和密码作为输入,并检索具有访问令牌和访问密钥的回调URL。我可以使用Windows窗体中的Web浏览器控件实现相同的功能,该控件具有oauthBrowser_Navigated事件触发器。
我尝试了什么:
我尝试在桌面应用程序中使用Web浏览器控件来实现结果。我附上参考逻辑
private void oauthBrowser_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
if (e.Url.Host == "www.example.com")
{
NameValueCollection query = HttpUtility.ParseQueryString(e.Url.Query);
_oauthVerifier = query["oauth_verifier"];
_ippRealmOAuthProfile.realmId = query["realmId"];
_ippRealmOAuthProfile.dataSource = query["dataSource"];
_caughtCallback = true;
oauthBrowser.Navigate("about:blank");
}
else if (_caughtCallback)
{
IToken accessToken = exchangeRequestTokenForAccessToken(_consumerKey, _consumerSecret, _requestToken);
_ippRealmOAuthProfile.accessToken = accessToken.Token;
_ippRealmOAuthProfile.accessSecret = accessToken.TokenSecret;
_ippRealmOAuthProfile.expirationDateTime = DateTime.Now.AddMonths(6);
this.DialogResult = DialogResult.OK;
this.Close();
}
}
解释
每次导航都会发生,即触发导航事件,您可以在其中检查URL属性
我在Console中尝试过的内容:
private void WinSys(string url)
{
try
{
var IE = new SHDocVw.InternetExplorer();
object URL = url;
IE.ToolBar = 0;
IE.StatusBar = false;
IE.MenuBar = false;
IE.Width = 622;
IE.Height = 582;
IE.Visible = true;
IE.Navigate2(url, null, null, null, null);
while (IE.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
{
if (IE.ReadyState == SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
{
IE.NavigateComplete2 +=IE_NavigateComplete2;
Console.WriteLine("Loaded");
System.Threading.Thread.Sleep(5000);
}
}
}
catch (Exception)
{
throw;
}
}
我试图在IE更改控制台应用程序中的URL时触发导航事件。我不应该放弃我在控制台应用程序中的控制权,因为它完成了执行,并且不等待与Internet Explorer导航事件属性的交互。