Как получить контекст сайта из формы с помощью WFFM?

Как получить контекст сайта из формы с помощью WFFM?

Я использую Sitecore Webforms для маркетологов в многоязычной среде (например, .com, .be, .nl en .de). Существует 3 сервера: 2 сервера доставки контента (CDS) и 1 сервер управления контентом (CMS). На серверах CDS нет возможности записывать данные, поэтому я настроил веб-сервис для пересылки данных формы с CDS на сервер CMS.

Моя проблема в том, что веб-служба взаимодействует с доменом .com. Используя домин .com для связи с веб-сервисом, CMS не знает, каков контекст сайта из отправляющего домена. Например, пользователь отправляет форму в домене .nl, сервер CMS считает, что она поступает из домена .com.

Кто-нибудь знает, как я могу получить контекст сайта (например, NL-nl) из отправки?

Большое спасибо!

Джорди

Показать лучший ответ

@MarkUrsino, это то, о чем я подумал сначала. Но речь идет о вызове веб-службы, которая использует один хост домена вместо того, чтобы быть дифференцированной в зависимости от текущего хоста. Вот почему Джорди не может получить сайт способом, описанным в связанном вопросе. Определенно не дубликат связанного вопроса.

Аааааааааааааааааааааааааааааааааааааааа хорошо. Полезно знать, спасибо!

Аналогичный вопрос был задан здесь , на что ответил @TwentyGotoTen . Место, где вам нужно получить текущий сайт, отличается от места в связанном вопросе, но ответ тот же. Используйте код, который используется Sitecore для разрешения сайта:

 var url = System.Web.HttpContext.Current.Request.Url; 
var siteContext = Sitecore.Sites.SiteContextFactory.GetSiteContext(url.Host, url.PathAndQuery);
  

Расширенная версия кода для разрешения сайтов (связанная в том же вопросе @MarkUrsino ) может быть найдено в статье Разрешение сайта контекста Sitecore .

Можете ли вы использовать правильный домен для каждого вызова веб-службы? Если вам нужно вызвать веб-службу, используя только домен .com , может быть, вы можете попробовать проверить UrlReferrer вместо текущего запроса Url host?

Я заметил, что @Jordy тоже задал этот вопрос :)

Ха, не проверял автора вопроса;] Замечено. @Jordy, вы включили код из связанного вопроса в свое приложение? Работает ли это в новом сценарии? Вам нужно вызвать веб-службу, используя домен .com ? Можете ли вы передать имя сайта в качестве дополнительного значения формы?

Это работает нормально, когда настроенный веб-сервис ссылается на тот же домен, из которого поступает отправка. Поскольку отправка поступает из домена .be, а в файле конфигурации веб-сервис ссылается на домен .com, контекст сайта неверен.

Можете ли вы разрешить сайт с помощью UrlReferrer.Host вместо Url.Host ?

Нет. UrlReferrer.Host имеет значение null. Я могу получить Url.Host, но это URL-адрес, настроенный в файле конфигурации для связи с веб-сервисом.

Можете ли вы разместить скрытый ввод в форме с названием сайта?

Я создал настраиваемое действие сохранения. Могу ли я получить контекст сайта по formid? Примечание: формы расположены в системном элементе.

Скрытые поля? Да, но это не рекомендуется из соображений безопасности.

Каждая из форм используется только в одном месте (или в контексте одного сайта)? Если да, то с помощью идентификатора формы вы можете найти форму, а затем получить все элементы, относящиеся к этой форме ( sdn.sitecore.net/Snippets/Item%20Handling/Checking%20Referen‌ ces /… ).

Если вы настроили веб-службу, почему бы просто не разрешить ссылку на сайт на компакт-диске и передать ее в качестве дополнительного параметра вызова веб-службы? Возможно, получите идентификатор домашнего узла, затем вы сможете решить это на своем сервере CM.

Обновите свою веб-службу, чтобы передать дополнительный параметр для имени хоста (через клиенты компакт-диска), а затем в службе (в вашем CM) получите от него контекстный сайт.

Я не думаю, что проблема заключается в имени хоста, он решает это для контекста сайта в CM, который будет иметь разные URL-адреса для интерфейса редактирования. Когда я прокомментировал ответ Мараса, я думаю, что он должен разрешить сайт на компакт-диске и передать идентификатор домашнего узла для контекстного сайта. Затем он может повторно решить проблему на CM, но это действительно зависит от того, чего именно нужно достичь. Я не уверен, что GetSiteContext() работает, если у вас есть несколько доменов, определенных в <site hostName="" /> , если так, домены CD могут быть определены там и для CM.

Я создал для каждого домена настраиваемое действие сохранения. Это решает проблему.