Reputation: 81
I want to use CefSharp to make a POST web api call in Win Forms c#.
I have Basic Authentication for my POST request. But if I run the code I get the error on line IFrame frame = browser.GetMainFrame();
:
Browser is not yet initialized. Use the IsBrowserInitializedChanged event and check the IsBrowserInitialized property to determine when the browser has been intialized.
Is there a way to resolve the same?
Following is my code:
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());
}
});
}
}
}
Thanks.
Upvotes: 1
Views: 2734
Reputation: 157
Well like the error message is telling you, you should check if the browser is already initialized.
I don't know the implementation of the class ChromiumWebBrowser
but I would try to first navigate to the desired url
browser.navigate(yourUrl);
and maybe check if the browser has already navigated to your url by subscribing to the event IsBrowserInitialized
before calling browser.GetMainFrame()
(like amaitland mentioned)
Upvotes: 2