ASP.NET Core: Установка SAPE кода на сайте

Сайтостроение | создано: 3/11/2022 | опубликовано: 3/11/2022 | обновлено: 11/17/2022 | просмотров: 285

В этой короткой статье я покажу, как можно установить 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">&copy;</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