2017-02-08 7 views
2

Я просмотрел документ на веб-узле dotnetbrowser ... пока я увидел пример, который показывает, как пересекать вызовы Ajax или фильтровать вызовы Ajax ... Я хочу знать, можно ли получить его после ответа на запрос Ajax. если возможно, как я могу это сделать?Как получить тело ответа на запрос ajax с помощью dotnetbrowser?

ответ

2

Да, можно перехватить ответы для запросов AJAX в DotNetBrowser. Чтобы реализовать это, вы можете использовать ResourceHandler для захвата URL-адресов запроса AJAX и NetworkDelegate для перехвата и фильтрации ответов.

Следующий пример кода демонстрирует возможный подход:

using DotNetBrowser; 
using DotNetBrowser.WinForms; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Text; 
using System.Windows.Forms; 

namespace GetAjaxResponseBodySample 
{ 
    public partial class Form1 : Form 
    { 
     private static List<string> ajaxUrls = new List<string>(); 
     private WinFormsBrowserView browserView; 

     public Form1() 
     { 
      InitializeComponent(); 
      browserView = new WinFormsBrowserView(); 
      browserView.Browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler(); 
      browserView.Browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate(); 
      Controls.Add(browserView); 
      browserView.Browser.LoadURL("http://www.w3schools.com/xml/ajax_examples.asp"); 
     } 

     private class AjaxResourceHandler : ResourceHandler 
     { 
      public bool CanLoadResource(ResourceParams parameters) 
      { 
       if (parameters.ResourceType == ResourceType.XHR) 
       { 
        Debug.WriteLine("Intercepted AJAX request: " + parameters.URL); 
        ajaxUrls.Add(parameters.URL); 
       } 
       return true; 
      } 
     } 

     private class AjaxNetworkDelegate : DefaultNetworkDelegate 
     { 
      public override void OnDataReceived(DataReceivedParams parameters) 
      { 
       if (ajaxUrls.Contains(parameters.Url)) 
       { 
        Debug.WriteLine("Captured response for: " + parameters.Url); 
        Debug.WriteLine("MimeType = " + parameters.MimeType); 
        Debug.WriteLine("Charset = " + parameters.Charset); 
        PrintResponseData(parameters.Data); 
       } 
      } 

      private void PrintResponseData(byte[] data) { 
       Debug.WriteLine("Data = "); 
       var str = Encoding.Default.GetString(data); 
       Debug.WriteLine(str); 
      } 
     } 
    } 
} 
+0

привет, я не могу поблагодарить вас достаточно хорошо ... ваш код именно то, что мне было нужно. Вы являетесь частью TeamDev? Огромное спасибо. – Cody