ASP.NET Core: Установка SAPE кода на сайте
Сайтостроение | создано: 11.03.2022 | опубликовано: 11.03.2022 | обновлено: 13.01.2024 | просмотров: 854
В этой короткой статье я покажу, как можно установить SAPE код на своем сайте, который работает на ASP.NET CORE причем не важно MVC или Razor Pages.
Когда-то я писал статью ASP.NET MVC: Установка SAPE кода на сайте. И после того как появился .NET Core, я долгое время честно пытался найти готовое решение, которое позволило бы установить код для монетизации одного из своих сайтов (calabonga.com) через продажу ссылок в системе sape.ru, но мои попытки были тщетны. Я принял решение написать сборку, которая поможет настроить модули продажи ссылок с "нуля". С "нуля" обозначает только то, что в работе сборки возможны ошибки и недоработки. Если вы захотите воспользоваться этой сборкой, то имейте это в виду. Итак, давайте я расскажу, как установить то, что я успел...
Nuget-пакет Calabonga.Sape.Core
Установите сборку
SapeTagHelper
Далее нужно создать TagHelper.
[HtmlTargetElement("sape", Attributes = HostAttributeName)]
[HtmlTargetElement("sape", Attributes = UserIdAttributeName)]
public class SapeTagHelper : TagHelper
{
private const string HostAttributeName = "asp-host";
private const string UserIdAttributeName = "asp-user-id";
[HtmlAttributeName(HostAttributeName)]
public string? Host { get; set; }
[HtmlAttributeName(UserIdAttributeName)]
public string? UserId { get; set; }
[ViewContext] public ViewContext ViewContext { get; set; } = null!;
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
var url = new SapeUrl(ViewContext.HttpContext.Request.GetEncodedPathAndQuery());
if (string.IsNullOrWhiteSpace(UserId))
{
output.Content.AppendHtml(new HtmlString("[SAPE ERROR]"));
await base.ProcessAsync(context, output);
return;
}
if (string.IsNullOrWhiteSpace(Host))
{
output.Content.AppendHtml(new HtmlString("[SAPE ERROR]"));
await base.ProcessAsync(context, output);
return;
}
var user = SapeFactory.Instance.GetUser(UserId!);
var host = await user.GetHostAsync(Host!);
var page = host?.GetPage(url);
var links = page?.GetLinks();
if (links != null && host != null)
{
foreach (var link in links)
{
output.Content.AppendHtml(link.RawLink);
}
}
await base.ProcessAsync(context, output);
}
}
Теперь этот SapeTagHelper можно использовать на любой странице вашего сайта. И при этом совершенно не важно, какой конкретно фреймворк вы используете: ASP.NET Core MVC или ASP.NET Core Razor Pages.
<sape asp-host="calabonga.com" asp-user-id="@Configuration["Sape"]"></sape>
Например, я хочу чтобы все страницы моего сайта были доступны для платформы sape.ru, и для этого я размещу на главном шаблоне сайта _Layout.cshtml в самом низу страницы в теге footer следующий код:
<footer>
При использовании материалов сайта ссылка на "Музей Юмора" обязательна.<br />
Все права защищены 2005 - @DateTime.Now.Year
<a class="text-muted text-decoration-none" asp-area="" asp-page="/Admin/Login">©</a>
<a class="text-muted text-decoration-none" href="https://www.calabonga.net">Calabonga SOFT</a>
<br />
<partial name="_Version" /><br />
<environment names="Development">
[СЧЕТЧИКИ]<br />
[SAPE]
</environment>
<environment names="Staging,Production">
<div class="my3">
@await Html.PartialAsync("_Counters")
</div>
<small id="links">
<sape asp-host="calabonga.com" asp-user-id="@Configuration["Sape"]"></sape>
</small>
</environment>
</footer>
Конфигурация
Обратите внимание на то, что есть обращение к конфигурации:
@Configuration["Sape"]
Это значит, что вам надо в начале странице внедрить зависимость:
@inject IConfiguration Configuration
А так же в appSettings.json добавить значение параметра Sape. Например, так:
{
"Sape": "4AS123139299210120",
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Cors": {
"Origins": "*"
}
}
Конечно же, у каждого у вас должен быть свой код на подобии "4AS123139299210120", который выдается при регистрации на сайте.
Как это работает?
Принцип прост, как синхрофазотрон! Сначала с сайта sape.ru скачиваются все ссылки для вашего ресурса, складываются в кэш (sape.json), и каждый час происходит обновление. кэша. Для каждой страницы происходит поиск в кэше наличия купленных ссылок для неё, и при успешном результате поиска SapeTagHelper "рисует" их на странице.
Ссылки
Nuget-пакет Calabonga.Sape.Core