C# 如何使用dotnetbrowser获取ajax请求-响应正文?

C# 如何使用dotnetbrowser获取ajax请求-响应正文?,c#,ajax,dotnetbrowser,C#,Ajax,Dotnetbrowser,我已经浏览了dotnetbrowser网站上的文档。。。虽然我看到了一个例子,展示了如何交叉Ajax调用或过滤Ajax调用。。。我想知道是否有可能在执行后获得Ajax请求体响应。如果可能的话,我该怎么做?是的,可以在DotNetBrowser中拦截AJAX请求的响应。要实现这一点,您可以使用ResourceHandler捕获AJAX请求URL,并使用NetworkDelegate截取和过滤响应 以下示例代码演示了可能的方法: using DotNetBrowser; using DotNetBr

我已经浏览了dotnetbrowser网站上的文档。。。虽然我看到了一个例子,展示了如何交叉Ajax调用或过滤Ajax调用。。。我想知道是否有可能在执行后获得Ajax请求体响应。如果可能的话,我该怎么做?

是的,可以在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);
            }
        }
    }
}
使用dotnebrowser;
使用dotnebrowser.WinForms;
使用System.Collections.Generic;
使用系统诊断;
使用系统文本;
使用System.Windows.Forms;
命名空间GetAjaxResponseBodySample
{
公共部分类Form1:Form
{
私有静态列表ajaxURL=new List();
私有WinFormsBrowserView浏览器视图;
公共表格1()
{
初始化组件();
browserView=新的WinFormsBrowserView();
browserView.Browser.Context.NetworkService.ResourceHandler=新的AjaxResourceHandler();
browserView.Browser.Context.NetworkService.NetworkDelegate=新的AjaxNetworkDelegate();
控件。添加(浏览视图);
browserView.Browser.LoadURL(“http://www.w3schools.com/xml/ajax_examples.asp");
}
私有类AjaxResourceHandler:ResourceHandler
{
公共bool CanLoadResource(ResourceParams参数)
{
if(parameters.ResourceType==ResourceType.XHR)
{
WriteLine(“截获的AJAX请求:“+parameters.URL”);
添加(parameters.URL);
}
返回true;
}
}
私有类AjaxNetworkDelegate:DefaultNetworkDelegate
{
公共覆盖无效OnDataReceived(DataReceivedParams参数)
{
if(ajaxUrls.Contains(parameters.Url))
{
Debug.WriteLine(“捕获的响应:“+parameters.Url”);
Debug.WriteLine(“MimeType=“+parameters.MimeType”);
Debug.WriteLine(“Charset=“+parameters.Charset”);
PrintResponseData(参数、数据);
}
}
私有void PrintResponseData(字节[]数据){
Debug.WriteLine(“Data=”);
var str=Encoding.Default.GetString(数据);
Debug.WriteLine(str);
}
}
}
}

你好,我非常感谢你。。。你的代码正是我需要的。你是TeamDev的一员吗?非常感谢。