AngleSharp IHtmlDocument 在哪里公开文档的 Uri?

Where does AngleSharp IHtmlDocument exposes the doc's Uri?

A​​ngleSharp 在何处公开已解析文档的 Uri?

考虑以下片段:

    HttpClient httpClient = new HttpClient();
    string htmlString = httpClient.GetStringAsync("http://www.whosebug.com").Result;

    HtmlParser htmlParser = new HtmlParser();
    var parsedHtml = htmlParser.Parse(htmlString);

    Console.WriteLine(parsedHtml.Url);
    Console.WriteLine(parsedHtml.DocumentUri);

它将打印 about:blank 两次。 文档已解析,我可以访问标题等属性,但找不到对其 uri 的引用。

有人成功做到了吗?

粗略搜索 AngleSharp for "DocumentUri" results with this:

[Test]
    public async Task LoadFromStringAndLoadFromUrlShouldResultInSameDom()
    {
        if (Helper.IsNetworkAvailable())
        {
            var config = new Configuration().WithDefaultLoader();
            var url = "http://imama.shop.by/kolyaski/detskaya_kolyaska_tutis_zippy_2_v_1_cvet_12_shokoladnyy223222222/";
            var client = new HttpClient();
            var message = new HttpRequestMessage(HttpMethod.Get, url);
            var response = await client.SendAsync(message);
            var html = await response.Content.ReadAsStringAsync();

            var documentStr = await BrowsingContext.New(config).OpenAsync(m => m.Content(html));
            var titleStr = documentStr.Title;

            var documentUri = await BrowsingContext.New(config).OpenAsync(url);
            var titleUri = documentUri.Title;

            Assert.AreEqual(titleUri, titleStr);
        }
    }

在您的代码中,唯一传递给 AngleSharp 的是包含 HTML 的字符串。如果您考虑一下,AngleSharp 无法知道您从何处获取字符串(它可以来自 URL、文件或硬编码为 C# 字符串文字)。

要使 DocumentUri 正常工作,您需要找到一种方法从 URL 加载文档到 "AngleSharp way",可能使用 BrowsingContext。以下代码为我正确打印了 URL :

static void Main(string[] args)
{
    var config = Configuration.Default.WithDefaultLoader();
    var task = BrowsingContext.New(config).OpenAsync("http://www.whosebug.com");
    var parsedHtml = task.Result;
    Console.WriteLine(parsedHtml.DocumentUri);
}