2017-02-08 11 views
2

私はdotnetbrowserのWebサイトのドキュメントを見てきました... Ajax呼び出しを交差させたり、Ajax呼び出しをフィルタリングする方法を示す例を見ていましたが、実行後Ajax要求の本体応答を取得できるかどうかを知りたいと思います。可能であれば、どうすればそれについて話すことができますか?dotnetbrowserを使用してajaxリクエストレスポンスボディを取得する方法は?

答えて

2

はい、DotNetBrowserでAJAX要求の応答を代行受信することは可能です。これを実装するには、ResourceHandlerを使用してAJAXリクエストURLを取得し、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

関連する問題