in src/Foundation/CommerceServer/code/Pipelines/ProductItemResolver.cs [180:241]
public virtual CatalogRouteData GetRouteDataValue(RouteData routeData)
{
var data = new CatalogRouteData();
if (routeData.Values.ContainsKey(ItemTypeField))
{
if (routeData.Values[ItemTypeField].ToString() == CatalogItemType)
{
var currentStorefront = StorefrontManager.CurrentStorefront;
Item productCatalogItem = currentStorefront.HomeItem.Axes.GetDescendant(NavigationItemName + "/" + routeData.Values["pathElements"].ToString());
if (productCatalogItem != null)
{
data.IsProduct = (productCatalogItem.ItemType() == StorefrontConstants.ItemTypes.Product);
data.Id = productCatalogItem.Name;
}
}
else
{
data.IsProduct = routeData.Values[ItemTypeField].ToString() == ProductItemType ? true : false;
}
}
else
{
return null;
}
if (routeData.Values.ContainsKey(IdField))
{
data.Id = CatalogUrlManager.ExtractItemId(routeData.Values[IdField].ToString());
}
else
{
if (string.IsNullOrWhiteSpace(data.Id))
{
return null;
}
}
if (routeData.Values.ContainsKey(CatalogField))
{
data.Catalog = routeData.Values[CatalogField].ToString();
}
if (string.IsNullOrEmpty(data.Catalog))
{
var defaultCatalog = StorefrontManager.CurrentStorefront.DefaultCatalog;
if (defaultCatalog != null)
{
data.Catalog = defaultCatalog.Name;
}
}
if (routeData.Values.ContainsKey(CategoryField))
{
var siteContext = ContextTypeLoader.CreateInstance<ISiteContext>();
siteContext.UrlContainsCategory = true;
}
return data;
}