Как настроить предварительный просмотр URL-адресов для определенных URL-адресов в редакторе Tinymce, интегрированном в AC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить предварительный просмотр URL-адресов для определенных URL-адресов в редакторе Tinymce, интегрированном в A

Сообщение Anonymous »

Я использую редактор TinyMCE в своем проекте ASP.NET Core 6 MVC. Я добавил функцию, которая заменяет ссылки на раздел предварительного просмотра, и она работала хорошо.
Но она заменила все URL-адреса предварительного просмотра, включая раздел содержимого.
Мне нужно оставить некоторые похожие URL-адреса в качестве общих URL-ссылок, и я хочу изменить выбранные мной URL-адреса.
Вот мой текущий код:
private async Task ReplaceUrlsWithPreviews(string content)
{
var anchorRegex = new Regex(@"]*href=[""'](?[^""']+)[""'][^>]*>(?.*?)", RegexOptions.IgnoreCase);

// Find all anchor tags
var matches = anchorRegex.Matches(content);

foreach (Match match in matches)
{
var url = match.Groups["url"].Value;
var linkText = match.Groups["text"].Value;

// Fetch metadata for the URL
var preview = await FetchMetadataFromUrl(url);

// If metadata is found, generate preview HTML
if (preview != null)
{
var previewHtml = GeneratePreviewHTML(preview);

// Replace the entire tag with the generated preview HTML
content = content.Replace(match.Value, previewHtml);
}
}

return content;
}

public static bool isValidUrl(string url)
{
string pattern = @"^[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s]$";
Regex reg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
var isMatch = !reg.IsMatch(url);
return isMatch;
}

// Fetch metadata (OpenGraph/TwitterCard) for URL
private async Task FetchMetadataFromUrl(string url)
{
var httpClient = new HttpClient();
var response = await httpClient.GetStringAsync(url);
var doc = new HtmlDocument();
doc.LoadHtml(response);

var preview = new LinkPreview
{
Title = GetMetaTagContent(doc, "og:title") ?? GetTitleTag(doc),
Description = GetMetaTagContent(doc, "og:description")??"",
Image = GetMetaTagContent(doc, "og:image") ?? "/img/preview.png",
Url = url
};

return preview;
}

private string? GetMetaTagContent(HtmlDocument doc, string property)
{
return doc.DocumentNode.SelectSingleNode($"//meta[@property='{property}']")?.GetAttributeValue("content", null);
}

private string GetTitleTag(HtmlDocument doc)
{
return doc.DocumentNode.SelectSingleNode("//title")?.InnerText??"";
}

// Generate HTML for link preview
private string GeneratePreviewHTML(LinkPreview preview)
{
return $@"


Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... to-asp-net
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»