Относительно полных путей в HTML (asp.net)

Я должен создать новостные рассылки URL. Я, чтобы сделать затем:

  1. Создайте WebClient;
  2. Используйте метод WebClient DownloadData для получения источника страницы в массиве байтов;
  3. Получите строку от массива байтов исходного HTML и установите его на содержание новостной рассылки.

Но я испытываю некоторые затруднения из-за путей. Источники всех элементов были относительны (/img/welcome.png), но мне нужно абсолютный (http://www.mysite.com/img/welcome.png).

Как я могу сделать это?

С наилучшими пожеланиями, Alex.

7
задан jo_asakura 27 April 2010 в 07:10
поделиться

3 ответа

Одним из возможных способов решения этой задачи является использование библиотеки HtmlAgilityPack .

Пример ( исправление ссылок ):

WebClient client = new WebClient();
byte[] requestHTML = client.DownloadData(sourceUrl);
string sourceHTML = new UTF8Encoding().GetString(requestHTML);

HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(sourceHTML);

foreach (HtmlNode link in htmlDoc.DocumentNode.SelectNodes("//a[@href]"))
{
    if (!string.IsNullOrEmpty(link.Attributes["href"].Value))
    {
        HtmlAttribute att = link.Attributes["href"];
        att.Value = this.AbsoluteUrlByRelative(att.Value);
    }
}
6
ответ дан 7 December 2019 в 05:19
поделиться

Если запрос приходит с вашего сайта (ссылки на тот же домен), то вы можете использовать следующее:

new Uri(Request.Uri, "/img/welcome.png").ToString();

Если вы находитесь в не-веб-приложении, или хотите жестко закодировать доменное имя:

new Uri("http://www.mysite.com", "/img/welcome.png").ToString();
2
ответ дан 7 December 2019 в 05:19
поделиться

У вас есть несколько вариантов:

  1. Вы можете преобразовать массив байтов в строку и найти замену.
  2. Вы можете создать объект DOM, преобразовать массив байт в строку, загрузить его и добавить значение к атрибутам, где это необходимо (в основном вы ищете любой атрибут src, href, в котором нет http: или https:).
    Console.Write(ControlChars.Cr + "Please enter a Url(for example, http://www.msn.com): ")
    Dim remoteUrl As String = Console.ReadLine()
    Dim myWebClient As New WebClient()
    Console.WriteLine(("Downloading " + remoteUrl))
    Dim myDatabuffer As Byte() = myWebClient.DownloadData(remoteUrl)
    Dim download As String = Encoding.ASCII.GetString(myDataBuffer)
    download.Replace("src=""/", "src=""" & remoteUrl & "/")
    download.Replace("href=""/", "href=""" & remoteUrl & "/")
    Console.WriteLine(download)
    Console.WriteLine("Download successful.")

Это очень надуманно, и на самом деле основная часть этого взята непосредственно из : http://msdn.microsoft.com/en-us/library/xz398a3f.aspx, но он иллюстрирует основной принцип метода 1.

0
ответ дан 7 December 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: