将“Accepted-Language”添加到HtmlWeb预请求的标题时抛出System.AccessViolationException

问题描述 投票:0回答:1

在调试我的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;
}
c# uwp html-agility-pack access-violation
1个回答
0
投票

我完全没有使用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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.