Take the community feedback survey now.

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.