«UmbracoHelper был создан с UmbracoContext, и текущий запрос не является внешним запросом». - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь реализовать разбиение на страницы ajax с помощью Umbraco.

На стороне сервера у меня есть следующее:

[System.Web.Http.HttpGet]
public JsonResult pagination(int? page)
{
IEnumerable<IPublishedContent> newsPosts = Umbraco.AssignedContentItem.DescendantOrSelf("news").Children.Where(x => x.IsVisible() && x.DocumentTypeAlias ==     "newsPost").OrderByDescending(x => x.UpdateDate).Take(5);

    //from here on we will be returning the json within which information required for displaying post entries in carousel is included.
    string json = "[some random string]"; //just random string for now.
    return Json(json, JsonRequestBehavior.AllowGet);
}

Как вы видите, я пытаюсь получить необходимые данные из IPublishedContents, но у меня возникают проблемы при создании экземпляра этой серии IPublishedContents.

И это ошибка, которую я получаю при доступе:

locahost: {port} / umbraco / surface / {controller} / pagination в Chrome.

Cannot return the IPublishedContent because the UmbracoHelper was constructed with an UmbracoContext and the current request is not a front-end request.

Details: System.InvalidOperationException: Cannot return the IPublishedContent because the UmbracoHelper was constructed with an UmbracoContext and the current request is not a front-end request.

Как я уже сказал, я делаю этот запрос из Chrome, что, по-моему, означает, что этот запрос от внешнего интерфейса, поэтому я не уверен, почему я получаю эту ошибку.

В процессе поиска я нашел эти

1) our.umbraco.com forum 2) сообщение stackoverflow

  1. заброшен без ответа, а что касается 2, мне кажется, что ответ не совсем относится к моему делу. Прежде всего я хочу создать экземпляр IPublishedContent.

Шахта Umbraco 7.

и можно ли было мне сказать, почему запросы от внешнего интерфейса нежелательны?

Любая подсказка будет высоко оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Попробуйте получить ваш узел таким образом.

var umbracoHelper = new Umbraco.Web.UmbracoHelper(Umbraco.Web.UmbracoContext.Current);
var yourNode = umbracoHelper.TypedContentAtXPath("umbracoPathtoYourNode");
0 голосов
/ 17 ноября 2018

Возможно, проще использовать веб-API

Создание контроллера, который наследуется от UmbracoApiController

public class PagedItemsController : UmbracoApiController
{
    [HttpGet]
    [ActionName("list")] //Optional see note below
    public IHttpActionResult GetItems([FromUri] int pageNo = 1)
    {
        // Next you need some way of getting the items you need. 
        // I would not return the whole IPublishedContent items.  Rather query those and then use linq Select to transform into a more relevant smaller class (not doing this here)
        // I've just included this for brevity
        var items = _itemService.GetPagedItems(pageNo);

        // Now return the results
        return Ok(items);
    }
}

Звонки на конечные точки в Umbraco следуют формату

/umbraco/api/{controller}/{endpoint}

При [ActionName("list")] выше вызов метода GetItems будет

http://example.com/umbraco/api/PagedItems/list?pageNo=3

Без атрибута ActionName вызов был бы

http://exampe.com/umbraco/api/PagedItems/GetItems?pageNo=3

При стандартном вызове jquery ajax это вернет json без необходимости сериализации.

...