asp.net-mvcrichtextkentico-kontent

How to resolve links to content items inside a rich text ? (Kontent.ai - ASP.NET framework)


So I followed the Kontent doc from the github which allows to retrieve content from a link (https://github.com/Kentico/kontent-delivery-sdk-net/wiki/Resolving-links-to-content-items)

First I implement a resolver to redirect when we click on the link like this :

public class CustomContentLinkUrlResolver : IContentLinkUrlResolver
    {
        public string ResolveBrokenLinkUrl()
        {
            return "/404";
        }

        public string ResolveLinkUrl(ContentLink link)
        {
            switch(link.ContentTypeCodename)
            {
                case "author":
                    return $"/author/{link.UrlSlug}";
                default:
                    return $"/not_found";
            }
        }
    }

Then I register my resolver within a IDeliveryClient

client = DeliveryClientBuilder
                .WithProjectId(myid)
                .WithContentLinkUrlResolver(new CustomContentLinkUrlResolver())
                .Build();

At this moment if i click on the link it will redirect to /author/linkName with an error on the page what I think is normal

I don't get the last part of the doc (how just by doing a getString on the contentItem the link will work ?) so I would like to know how to display the content on the redirect page

I don't know if i was clear enough and sorry for my english

Here is the error thrown on the redirect page

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.


Solution

  • The last part of the wiki article refers to something that you already have:

    At this moment if i click on the link

    If you have a link that you can click on, then you have done what that part of the article describes.

    What you need is to resolve the request. If you are getting a 404 that you expect, then you know that you need to add a route to your application to handle the request. In the handler (a controller, a component, etc.) extract the urlSlug from the route and use it with a IDeliveryClient to retrieve the item and then render the content. You will need to filter the GetItems call with something like new EqualsFilter("elements.urlSlug", urlSlug).