我正在學習如何使用.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