CefSharp制作了一个POST web api,调用Win Forms c#



我想使用CefSharp在Win Forms c#中进行POST web api调用。

我的POST请求有基本身份验证。但如果我运行代码,我会在IFrame frame = browser.GetMainFrame();:行上得到错误

浏览器尚未初始化。使用IsBrowserInitializedChanged事件,并检查IsBrowserInitialized属性以确定何时浏览器已初始化。

有办法解决同样的问题吗?

以下是我的代码:

public partial class Form1 : Form
{
ChromiumWebBrowser browser = null;
public Form1()
{
InitializeComponent();
Cef.Initialize(new CefSettings());
browser = new ChromiumWebBrowser("http://ctstest.azurewebsites.net/api/default");
this.Controls.Add(browser);
browser.Dock = DockStyle.Fill;
PostTest.Navigate(browser, "http://ctstest.azurewebsites.net/api/default", null, "application/json");
}
}
public static class PostTest
{
public static void Navigate(this IWebBrowser browser, string url, byte[] postDataBytes, string contentType)
{
IFrame frame = browser.GetMainFrame();
IRequest request = frame.CreateRequest();
request.Url = url;
request.Method = "POST";
request.InitializePostData();
var element = request.PostData.CreatePostDataElement();
element.Bytes = postDataBytes;
request.PostData.AddElement(element);
NameValueCollection headers = new NameValueCollection();
headers.Add("Content-Type", contentType);
request.Headers = headers;
frame.LoadRequest(request);
frame.GetTextAsync().ContinueWith(taskHtml =>
{
var html = taskHtml.Result;
System.Windows.Forms.MessageBox.Show(html);
});
string script = string.Format("document.documentElement.outerHTML;");
frame.EvaluateScriptAsync(script).ContinueWith(x =>
{
var response = x.Result;
if (response.Success && response.Result != null)
{
var fullhtml = response.Result;
System.Windows.Forms.MessageBox.Show(fullhtml.ToString());
}
});
}
}
}

谢谢。

就像错误消息告诉您的那样,您应该检查浏览器是否已经初始化。

我不知道类ChromiumWebBrowser的实现,但我会尝试首先导航到所需的url

browser.navigate(yourUrl);

在调用browser.GetMainFrame()(如前面提到的amaitland(之前,可以通过订阅事件IsBrowserInitialized来检查浏览器是否已经导航到您的url

最新更新