如何解决在 dotNetBrowser 中监听回调
如何使用 dotnetbrowser 在 winform 应用程序中执行以下操作?
我可以用普通的网络浏览器做到这一点,但我希望它保持静音。这就是我尝试使用 dotnetbrowser 的原因。
dotNetbrowser 是一个不错的选择,还是有更好的选择?
这是来自我使用非静音网络浏览器的测试代码。首先,我创建了一个监听 redirectUri 的监听器:
var listener = new HttpListener();
listener.Prefixes.Add(redirectURI);
listener.Start();
然后我在网络浏览器中启动网址:
Process p = Process.Start(url);
启动的 url 将向 redirectUri 发送回调。听众会得到它。
var context = await listener.GetContextAsync(); ;
string formData = string.Empty;
using (var body = context.Request.InputStream)
{
using (var reader = new System.IO.StreamReader(body,context.Request.ContentEncoding))
{
formData = reader.ReadToEnd();
}
}
listener.Close();
解决方法
我在 dotnetbrowser 支持站点的帮助下找到了解决方案。
这是我新测试项目中的 winform 构造函数:
public Form1()
{
webView = new BrowserView() { Dock = DockStyle.Fill };
Task.Run(() =>
{
engine = EngineFactory.Create(new EngineOptions.Builder
{
RenderingMode = RenderingMode.HardwareAccelerated,LicenseKey = "your license key here"
}
.Build());
browser = engine.CreateBrowser();
})
.ContinueWith(t =>
{
webView.InitializeFrom(browser);
var listener = new HttpListener();
listener.Prefixes.Add(redirectURI);
listener.Start();
browser.Navigation.LoadUrl(url);
var context = listener.GetContextAsync().GetAwaiter().GetResult();
//Get data from redirectUri. You find this code from test example above,but not really relevant for the problem.
var formData = GetRequestPostData(context.Request);
listener.Close();
},TaskScheduler.FromCurrentSynchronizationContext());
InitializeComponent();
FormClosing += Form1_FormClosing;
Controls.Add(webView);
this.Visible = false;
}
private void Form1_FormClosing(object sender,FormClosingEventArgs e)
{
browser?.Dispose();
engine?.Dispose();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。