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

Опубликовано 11.08.2012 12:43:00 в категории Микросервисы

В этой короткой статье я покажу как можно установить SAPE код на своем сайте, который работает на ASP.NET MVC.

Могу предположить, что вы уже попытались самостоятельно установить SAPE-код на своем сайте и, наверняка, уже попытались найти найти информацию на основном форуме этой системы. У меня не получилось найти чего-то более и менее разумного. Пришлось обращаться к автору сборки, который любезно подсказал, что надо делать всё “вручную”.

Настройка конфигурации (web.config)

Для начала в секцию “configSections” добавляем настройку sape-библиотеки (см. строки с 8 по 13):

<configuration>
    <configSections>
        <section name="entityFramework"
                 type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
                        EntityFramework, Version=4.3.1.0, Culture=neutral,
                        PublicKeyToken=b77a5c561934e089" />

        <sectionGroup name="effetto.Sape">
            <section name="SapeConfig" type="effetto.Sape.SapeConfigSection, SAPE"
                    allowLocation="true"
                    requirePermission="false"
                     allowDefinition="Everywhere"/>
        </sectionGroup>

    </configSections>

    <!-- много другого полезного кода настроек -->

</configuration>

После этого перед секцией “system.web” (хотя можно и после нее, главное чтобы в эту ветку конфигурации) помещаем код:

<effetto.Sape>
   <SapeConfig UserId="[ваш код пользователя]">
       <DefaultDocuments>
           <add Name="/site/index" />
       </DefaultDocuments>
   </SapeConfig>
</effetto.Sape>

Хотя в принципе, можно этот код не размещать, так если только на случай открыть конфигурации и вспомнить какой у вас код. Я в конечной реализации удалил второй код, и всё равно всё заработало.

Создаем свой ActionResult для SAPE

Чтобы реализовать рендеринг SAPE-ссылок на ASP.NET MVC надо создать свой собственный результат обработки запроса (ActionResult). Я назвал свой класс SapeLinksResult. Для начала добавил необходимые пространства имен:

using System.Web.Mvc;
using effetto.Sape;

Далее сам код класса SapeLinksResult. Я покажу весь код целиком, чтобы проще было копировать:

public class SapeLinksResult : ActionResult
{
    private SapeUrl url;
    private SapePage page;
    private SapeHost host;

    public string UserId { get; private set; }

    public string HostName { get; private set; }

    public SapeLinksResult(string userId, string hostname)
    {
        if (String.IsNullOrEmpty(userId))
            throw new ArgumentNullException("userId");
        if (String.IsNullOrEmpty(hostname))
            throw new ArgumentNullException("hostname");
        this.UserId = userId;
        this.HostName = hostname;

        url = new SapeUrl();

        SapeUser user = SapeFactory.Factory.GetUser(this.UserId);
        host = user.GetHost(hostname);
        page = host.GetPage(url);
    }

    public override void ExecuteResult(ControllerContext context)
    {
        HttpResponseBase response = context.HttpContext.Response;
        HttpRequestBase request = context.HttpContext.Request;
        List<SapeLink> links = null;
        if (page != null)
        {
            links = page.GetLinks();

            if (links != null)
            {
                foreach (SapeLink link in links)
                {
                    response.Write(link.RawLink + host.Delimiter);
                }
            }
        }
    }
}

Использование нового SapeLinksResult

Чтобы использовать данный класс перейдем в контроллер (мой называется Home) и добавим новый метод SapeCode. Сам метод прост до безобразия, обратите внимание на атрибут над методом – это важно.

[ChildActionOnly]
public ActionResult SapeCode()
{
    return new SapeLinksResult("ваш_идентификационный_номер_SAPE", "вашсайт.ру");
}

Не забудьте указать свой идентификационный номер в системе SAPE и доменное имя вашего сайта. На основании этих данных и будут загружаться ссылки для страниц.

Теперь надо вызвать этот метод на тех страницах, где вы хотели бы разместить SAPE-ссылки. Также можно разместить в главном шаблоне сайта, и тогда код будет отрабатывать на всех страницах вашего сайта.

<p class="code">
     @Html.Action("sapecode", "home")
</p>

Вот, собственно говоря и всё. Пробуйте, у меня получилось, чего и вам желаю.

Комментарии к статье ()

Загрузка...

Что-то пошло не по сценарию и завершилось ошибкой. Перезагрузить страницу (F5) 🗙

Переподключаем сервер...

Переподключение сломалось... Пробуем еще раз сек.

Не получилось переподключится.
Пожалуйста, обновите страницу F5

Сессия была поставлена сервером на паузу.

Восстановить сессию не получилось.
Пожалуйста, обновите страницу F5.