我正在学习如何使用.NET框架。我正在使用ASP .NET核心。直到最近我通过提出很少的请求来保持配额,并且从我安装dotnetbrowser库开始,我从未有过或者打过我的天蓝色webhosting配额。它是我的项目的最佳库,因为它可以让数据更容易。但是,如果有人能告诉我如何在不使用浏览器控件(如Web浏览器或dotnetbrowser)的情况下获取相同数据,我将不胜感激。我需要的数据在提供所需值之前需要经过多个服务器和客户端通信。所以我的问题是如何在不使用浏览器控件的情况下实现同样的功能?我该如何减少我在azure上运行的应用程序的内存使用量
最后,我的代码可能是错误的,因为我不太熟悉线程和任务。我可能会使用太多的内存。所以下面是我的代码
using DotNetBrowser;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Web;
using System.Web.Http;
namespace AjaxRequest.Controllers
{
public class ValuesController : ApiController
{
private static ManualResetEvent waitEvent;
private static List<string> ajaxUrls = new List<string>();
static string str = "";
public static Browser browser;
public ValuesController()
{
waitEvent = new ManualResetEvent(false);
browser = BrowserFactory.Create();
browser.Context.NetworkService.ResourceHandler = new AjaxResourceHandler();
browser.Context.NetworkService.NetworkDelegate = new AjaxNetworkDelegate();
}
// GET api/values
public string Get(int id, string title)
{
string Title = title.Replace(" ", "-");
browser.LoadURL(string.Format("https://ba.com/foo/{0}-{1}/something.html", Title, id));
waitEvent.WaitOne();
browser.Dispose();
string Json = Regex.Replace(str, @"\\","");
return Json.Replace("\\\"", "\"");
}
public class AjaxResourceHandler : ResourceHandler
{
//HomeController hc;
public bool CanLoadResource(ResourceParams parameters)
{
if (parameters.ResourceType == ResourceType.XHR && parameters.URL.Contains("https://something.com/ajax/blahblah"))
{
ajaxUrls.Add(parameters.URL);
}
return true;
}
}
public class AjaxNetworkDelegate : DefaultNetworkDelegate
{
//HomeController hc;
public override void OnDataReceived(DataReceivedParams parameters)
{
if (ajaxUrls.Contains(parameters.Url))
{
PrintResponseData(parameters.Data);
}
}
public void PrintResponseData(byte[] data)
{
str = Encoding.UTF8.GetString(data);
ajaxUrls.Clear();
browser.Stop();
browser.dispose();
waitEvent.Set();
}
public void error(string info)
{
str = info;
waitEvent.Set();
}
}
}
}
是否有可能我做错了?如果是这种情况,如何改进以节省内存或数据?
你能解释一下你在网络应用中用DotNetBrowser做什么吗? –
该应用程序与网站进行通信,当值被馈送到网站获取我的数据时,会经过一系列的Ajax请求,然后铬包装器通过JavaScript执行数据,然后发出另一个Ajax请求,结果会一直持续到所需的数据得到。我不知道httpclient可以做到这一点。在我的情况下,当我收听XHR请求...在获得我想要的数据之前,需要4个需要XHR请求。 – Cody
在本声明中,您没有解释清楚您的目标是什么:**我需要的数据在提供所需值之前需要经过多个服务器和客户端通信** ---我们无法提供基于此的替代解决方案... – Svek