ASP.NET MVC: Установка SAPE кода на сайте
В этой короткой статье я покажу как можно установить 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>
Вот, собственно говоря и всё. Пробуйте, у меня получилось, чего и вам желаю.