in src/Foundation/CommerceServer/code/Managers/CatalogUrlManager.cs [263:330]
public static string BuildShopUrl(string categoryId, string categoryName, string productId, string productName, string variantId, string variantName, string catalogName)
{
Assert.ArgumentNotNullOrEmpty(categoryId, "categoryId");
var route = new StringBuilder("/");
if (IncludeLanguage)
{
route.Append(Sitecore.Context.Language.Name);
route.Append("/");
}
var isGiftCard = (productId == StorefrontManager.CurrentStorefront.GiftCardProductId);
if (isGiftCard)
{
route.Append(ProductItemResolver.LandingUrlRoute);
route.Append("/");
route.Append(ProductItemResolver.BuyGiftCardUrlRoute);
}
else
{
if (!string.IsNullOrEmpty(catalogName))
{
route.Append(EncodeUrlToken(catalogName, true));
route.Append("/");
}
route.Append(ProductItemResolver.ShopUrlRoute);
route.Append("/");
if (!string.IsNullOrEmpty(categoryName))
{
route.Append(EncodeUrlToken(categoryName, true));
route.Append(_urlTokenDelimiter);
}
route.Append(EncodeUrlToken(categoryId, false));
if (!string.IsNullOrEmpty(productId))
{
route.Append("/");
if (!string.IsNullOrEmpty(productName))
{
route.Append(EncodeUrlToken(productName, true));
route.Append(_urlTokenDelimiter);
}
route.Append(EncodeUrlToken(productId, false));
if (!string.IsNullOrEmpty(variantId))
{
route.Append("/");
if (!string.IsNullOrEmpty(variantName))
{
route.Append(EncodeUrlToken(variantName, true));
route.Append(_urlTokenDelimiter);
}
route.Append(EncodeUrlToken(variantId, false));
}
}
}
var url = StorefrontManager.StorefrontUri(route.ToString());
return url;
}