public string ProductUsingCurrentCategoryPathOrCurrentCategoryOrCanonical(IProduct product, ILocalization localization) { var path = (GetLocalizedCurrentPath(localization) ?? Enumerable.Empty <ICategory>()).ToArray(); product = _productService.Localize(product, localization); var currentCategoryId = path.Select(c => c.Id).LastOrDefault(); string productUrl; if (path.Any() && product.Categories.Any(c => c.Id == currentCategoryId)) { productUrl = _productUrlService.GetUrlUsingCategoryPathOrCanonical(product, path); } else { var category = _categoryService.Localize(_requestService.Current.Category, localization); productUrl = _productUrlService.GetUrlInCategoryOrCanonical(product, category); } return(_urlFormatService.FormatUrl(_urlLocalizationService.LocalizeCatalogUrl(productUrl, localization))); }