Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Hi,
In our project we have a class SimpleAddressRouteHandler which overrides SeoUriRouter to set custom market and language.
But after upgrading to Commerce v13, SeoUriRouter has become obsolete. What is the recommended way to replace SeoUriRouter? I can't find any information about it.
Thanks in advance!
Bart
[ServiceConfiguration(ServiceType = typeof(ISimpleAddressRouteHandler), Lifecycle = ServiceInstanceScope.Singleton)] public class SimpleAddressRouteHandler : SeoUriRouter { [NonSerialized] private static readonly ILogger _log = LogManager.GetLogger(typeof(SimpleAddressRouteHandler)); private readonly IMarketService _marketService; private readonly ICurrentMarket _currentMarket; public SimpleAddressRouteHandler(PartialRouteHandler partialRouteHandler, IContentLoader contentLoader, ReferenceConverter referenceConverter, IContentVersionRepository contentVersionRepository, ICatalogSystem catalogSystem, IMarketService marketService, ICurrentMarket currentMarket) : base(partialRouteHandler, contentLoader, referenceConverter, contentVersionRepository, catalogSystem) { _marketService = marketService; _currentMarket = currentMarket; } /// <summary> /// Tries to handle a segment value as a simple address. /// </summary> /// <param name="urlSegment">The simple address</param> /// <param name="routeRoot">The route root</param> /// <param name="segmentContext">The segment context</param> /// <returns><c><see cref="T:EPiServer.Web.Routing.Segments.SimpleAddressRouteValues" /></c> if <paramref name="urlSegment" /> was handled, otherwise <c>null</c></returns> public override SimpleAddressRouteValues GetRouteValues(string urlSegment, ContentReference routeRoot, SegmentContext segmentContext) { SimpleAddressRouteHandler._log.DebugBeginMethod("GetRouteValues", new object[] { urlSegment, routeRoot, segmentContext }); //strip software part from the url again if (urlSegment.StartsWith("software/", StringComparison.InvariantCultureIgnoreCase)) { urlSegment = urlSegment.Substring("software/".Length); } //strip software part from the url again if (urlSegment.StartsWith("trainingen/", StringComparison.InvariantCultureIgnoreCase)) { urlSegment = urlSegment.Substring("trainingen/".Length); } ProcessLanguageAndMarketSegment(ref urlSegment, segmentContext); if (urlSegment == null) return null; return base.GetRouteValues(urlSegment, routeRoot, segmentContext); } public void ProcessLanguageAndMarketSegment(ref string urlSegment, SegmentContext segmentContext) { //Check LanguageMarket segment if (urlSegment.Contains("/")) { var firstSegment = urlSegment.Split('/')[0]; //First index shouldbe our languageAndMarketSegment //Our segment is always {TwoLetterIsoCode}-{MarketCode}, therefor segment[2] should always be "-" if (firstSegment.Length >= 3 && firstSegment[2] == '-') { var segmentParts = firstSegment.Split('-'); //is the last part a valid marketCode var languagePart = segmentParts[0]; var marketPart = segmentParts[1]; var validMarket = MarketConstants.UrlToMarketMappings.ContainsKey(marketPart); if (validMarket) { //Set market var marketCode = MarketConstants.UrlToMarketMappings[marketPart]; var marketId = new MarketId(marketCode); _currentMarket.SetCurrentMarket(marketId); //Set language var market = _marketService.GetMarket(marketId); var language = market.Languages.FirstOrDefault(x => x.TwoLetterISOLanguageName == languagePart); if (language == null) { urlSegment = null; return; } segmentContext.Language = language.ToString(); //Finally strip language and market segment from url urlSegment = urlSegment.Substring(urlSegment.IndexOf('/') + 1); } } } } }