CefSharp делает вызов POST веб-API Win Forms c # - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу использовать CefSharp для выполнения веб-API-вызова POST в Win Forms c #.

У меня есть базовая аутентификация для моего запроса 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());
            }
        });
    }

}
}

Спасибо.

1 Ответ

0 голосов
/ 21 ноября 2018

Как и в сообщении об ошибке, вам следует проверить, инициализирован ли уже браузер.

Я не знаю реализацию класса ChromiumWebBrowser, но сначала попробую перейти кжелаемый URL

browser.navigate(yourUrl);

и, возможно, проверьте, не перешел ли браузер на ваш URL, подписавшись на событие IsBrowserInitialized перед вызовом browser.GetMainFrame() (как упоминалось в amaitland)

...