Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more

Getting ContentReference for current content in IUrlGeneratorPipelineStep

Vote:
 

Hi Folks,

We are looking at modifying the URL generator pipeline to modify the url for certain content types.  We have a new pipeline step registered, but when the step is hit, I would expect the context.ContentLink to be the current page I am generating the url for., but it is always the Start Page.  Looking at the PreferredUrlGeneratorPipelineStep in the same pipeline, it looks like it is using the current page ContentReference and I would like to do the same. Anyone know what I am doing wrong?

public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
{
    return builder =>
    {
        var generatorPipelineRegistry = builder.ApplicationServices.GetService<UrlGeneratorPipelineRegistry>();
        var resolverPipelineRegistry = builder.ApplicationServices.GetService<UrlResolverPipelineRegistry>();

        var startPageDefaultMode = GetGeneratorDefinition("StartPage", RouteContextMode.Default);
        startPageDefaultMode.Insert(
            startPageDefaultMode.FindIndex(x => x.Type == typeof(PreferredUrlGeneratorPipelineStep)),
            new PipelineStepDefinition
            {
                Type = typeof(ProductDetailGeneratorStep)
            });


        PipelineDefinition GetGeneratorDefinition(string name, RouteContextMode contextMode)
        {
            return generatorPipelineRegistry.All.FirstOrDefault(x =>
                x.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
                x.ContextMode == contextMode);
        }

        next(builder);
    };
}

 

public class ProductDetailGeneratorStep : IUrlGeneratorPipelineStep
{
    public RoutingState Generate(UrlGeneratorContext context, UrlGeneratorOptions options)
    {
        //get content 
        var contentLoader = ServiceLocator.Current.GetInstance<IContentLoader>();

        if (contentLoader.TryGet(context.ContentLink, out ProductBase product))
        {
          //do stuff and update url
        }

        // Tells the pipeline to continue generating next segment in the URL
        return RoutingState.Continue;
    }
}
#336615
Feb 10, 2025 18:05
* You are NOT allowed to include any hyperlinks in the post because your account hasn't associated to your company. User profile should be updated.