Fail to Retrieve Content

2025/04/18 4:21 PM

I try to get content items with this code to try get the content:

[assembly: RegisterWebPageRoute(
    ContentSection.CONTENT_TYPE_NAME,
    typeof(BlogController),
    ActionName = nameof(BlogController.GetContentList))]

namespace HEJAZ.Frontend.Web.Features.Hejaz.Blog;

[ApiController]
[Route("api/[controller]")]
public class BlogController : WebPageControllerBase
{
    private readonly ILogger<BlogController> _logger;
    private readonly IMediator _mediator;
    private readonly IContentQueryExecutor _contentQueryExecutor;

    public BlogController(
        IMediator mediator,
        IContentQueryExecutor contentQueryExecutor,
        ILogger<BlogController> logger)
        : base(mediator)
    {
        _logger = logger;
        _mediator = mediator;
        _contentQueryExecutor = contentQueryExecutor;
    }

    [HttpGet]
    public async Task<IActionResult> GetContentList([FromQuery] GetContentListQuery query)
    {
        ContentItemQueryBuilder builder =
            new ContentItemQueryBuilder()
                .ForContentType(
                    ContentSection.CONTENT_TYPE_NAME,
                    subqueryParameters =>
                {
                    subqueryParameters.TopN(5);
                }).InLanguage("en");

        IEnumerable<ContentSection> blogs =
            await _contentQueryExecutor.GetMappedResult<ContentSection>(builder);

        return Ok();
    }
}

when debugging the code hit the line 39. i got error on my postman:

System.ArgumentException: Type for content type name 'Hejaz.ContentSection' is not found.
   at CMS.ContentEngine.ContentTypeMappingRegister.Get(String contentTypeName)
   at CMS.ContentEngine.ContentQueryModelTypeMapper.CMS.ContentEngine.IContentQueryModelTypeMapper.Map[TModel](IContentQueryDataContainer dataContainer)
   at CMS.ContentEngine.ContentQueryExecutor.Map[TModel](IContentQueryDataContainer dataContainer)
   at CMS.ContentEngine.ContentQueryExecutorExtensions.<>c__DisplayClass1_0`1.<GetMappedResult>g__ResultSelector|0(IContentQueryDataContainer dataContainer)
   at CMS.ContentEngine.ContentQueryExecutor.GetResultInternal[TModel](ContentItemQueryBuilder builder, Func`2 resultSelector, ContentQueryExecutionOptions options, CancellationToken cancellationToken)
   at HEJAZ.Frontend.Web.Features.Hejaz.Blog.BlogController.GetContentList(GetContentListQuery query) in C:\Users\Willy Anggara\source\xperience-phase-2\HEJAZ.Frontend.Web\Features\Hejaz\Blog\BlogController.cs:line 64
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
   at Kentico.Content.Web.Mvc.ContentOutputMiddleware.InvokeAsync(HttpContext context)
   at Kentico.Web.Mvc.KenticoRequestLocalizationMiddleware.InvokeAsync(HttpContext context)
   at Kentico.Content.Web.Mvc.Routing.WebPageRedirectionContextMiddleware.InvokeAsync(HttpContext context, IWebsiteChannelContext websiteChannelContext)
   at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.<Invoke>g__AwaitMatch|10_1(EndpointRoutingMiddleware middleware, HttpContext httpContext, Task matchTask)
   at Kentico.Content.Web.Mvc.WebsiteChannelContextMiddleware.InvokeAsync(HttpContext context, IWebsiteChannelContext websiteChannelContext)
   at Kentico.Web.Mvc.KenticoRequestEventsMiddleware.InvokeAsync(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Kentico.Web.Mvc.KenticoErrorHandlingMiddleware.InvokeAsync(HttpContext context, ILogger`1 logger)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context)

HEADERS
=======
Accept: */*
Connection: keep-alive
Host: localhost:10400
User-Agent: PostmanRuntime/7.43.3
Accept-Encoding: gzip, deflate, br
Postman-Token: 6a028ee0-b742-4f0d-82b7-9582c8051ecd

I Already generated the Content Type model:

checked on my DB the class is exist too:

Environment

  • Xperience by Kentico version: [30.1.3]
  • .NET version: [*]
  • Execution environment: [SaaS]
  • im following this documentation Retrieve Content Items

Answers

2025/04/18 4:54 PM

You don't need any ASPNET Core attribute routing - Xperience handles selecting the correct controller and action method based on the RegisterWebPageRoute attribute.

2025/04/18 8:36 PM

how to hit the endpoint? i tried /blog/getcontentlist but not triggered

2025/04/22 11:40 AM
Answer

Read the docs on Content Tree Routing. The page defines the route/URL, not the controller and action method name.

To answer this question, you have to login first.