在调试我的UWP应用程序时,它会抛出System.AccessViolationException,并显示消息“尝试读取或写入受保护的内存”。这通常表明其他记忆已经腐败。并且堆栈跟踪为null。尝试向HtmlWeb对象的预请求标头添加“Accept-Language”(“en-US”)时会抛出异常(请参阅下面的图片和代码)。使用xUnit运行相同的代码工作正常。有人认出这个问题吗?
抛出异常的图片:https://i.imgur.com/gHkmR6q.png
public static HtmlNode GetHtmlNode(string url, string requestLanguage)
{
var htmlWeb = new HtmlWeb();
htmlWeb.PreRequest += (request) =>
{
// This line of code throws the exception (see the picture as well)
request.Headers.Add("Accept-Language", requestLanguage);
return true;
};
return htmlWeb.Load(url).DocumentNode;
}
我完全没有使用HtmlWeb解决了这个问题,如下所示:
public static HtmlNode GetHtmlNode(string url, string requestLanguageCode)
{
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "Mozilla";
request.Accept = "Accept: text/html";
request.Headers.Add("Accept-Language: " + requestLanguageCode);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
using (var reader = new StreamReader(stream))
{
string html = reader.ReadToEnd();
var doc = new HtmlDocument();
doc.LoadHtml(html);
return doc.DocumentNode;
}
}
catch (WebException)
{
return null;
}
}