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
You don't need any ASPNET Core attribute routing - Xperience handles selecting the correct controller and action method based on the RegisterWebPageRoute
attribute.
how to hit the endpoint? i tried /blog/getcontentlist but not triggered
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.