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

Сайтостроение | создано: 8/11/2012 | опубликовано: 8/11/2012 | обновлено: 11/14/2022 | просмотров: 8362 | всего комментариев: 12

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

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

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

8/11/2012 12:26:02 PM Павел Эффетто ASP.NET MVC: Установка SAPE кода на сайте

Спасибо большое за исследовательский мануал, надеюсь он многим поможет!

Хочу заметить, что указанный подход реализует только базовый функционал, но 90% площадок его хватает.

Павел Эффетто, именно такую задачу и ставил перед собой. Дальше можно будет и больше впендюрить, если потребуется... :)

Thanks guys for the idea, I have alsso published a widget for the Orchard CMS here: https://gallery.orchardproject.net/List/Modules/Orchard.Module.SapeModule

Regards,

Anton.

немогу понять

SapeConfig UserId="[ваш код пользователя]"

где брать код пользователя?

код пользователя выдается при регистрации в системе SAPE

Приветствую!

Спасибо за подробные статьи! Таких мало.

Не могли бы подсказать как правильно кнопку твитнуть вставить на сайт (mvc 3)

Я везде на html+php  использую обычный код твитера, вот такой prokomputer.ru/wp-content/uploads/twitter.txt

а в mvc  Вставляю его в вьюху страницы, он не работает, видать там как то по особому нужно оформить скрипт...

спасибо

фух, еле отправил каммент, если нажать чекбокс подписаться, то идет прогресс и все

Димка, к счастью я ничего не знаю про PHP, и к сожалению, не смогу вам помочь

SapeUser user = SapeFactory.Factory.GetUser(this.UserId);

получаю ошибку, что Ссылка на объект не указывает на экземпляр объекта

Спасибо. Работает

Сделал по вашей методике, но все равно получаю "Код на сайте не установлен". Как вообще можно понять глюк ли это sape или это я где-то накосячил?

public override void ExecuteResult(ControllerContext context)
        {
            HttpResponseBase response = context.HttpContext.Response;
            if (page == null) return;
            if (content == null) //simple links
            {
               List<SapeLink> links = null;
               links = page.GetLinks();
               if (links != null)
                    foreach (SapeLink link in links)
                        response.Write(link.RawLink + host.Delimiter);
            }
            else //context links
            {
               response.Write(page.MakeContextLinks(content));
            }       

 

Добрый день!
А есть ли способ установить код sape для приложений на asp.net core&
Спасибо!

Да, планируется в ближайшее время разработка под Asp.net core