将 "Accepted-Language" 添加到 HtmlWeb pre-request 的 headers 时抛出 System.AccessViolationException
System.AccessViolationException is thrown when adding an "Accepted-Language" to a HtmlWeb pre-request's headers
调试我的 UWP-application 时,它抛出一个 System.AccessViolationException 消息'试图读取或写入受保护的内存。这通常表示其他内存已损坏。' 并且堆栈跟踪为空。尝试将 "Accept-Language" ("en-US") 添加到 HtmlWeb object 的 pre-request header 时抛出异常(参见下面的图片和代码)。 运行 使用 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;
}
}
调试我的 UWP-application 时,它抛出一个 System.AccessViolationException 消息'试图读取或写入受保护的内存。这通常表示其他内存已损坏。' 并且堆栈跟踪为空。尝试将 "Accept-Language" ("en-US") 添加到 HtmlWeb object 的 pre-request header 时抛出异常(参见下面的图片和代码)。 运行 使用 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;
}
}