public string Generate(RequestContext requestContext, INavigatable navigationItem, RouteValueDictionary routeValues) { Guard.IsNotNull(requestContext, "requestContext"); Guard.IsNotNull(navigationItem, "navigationItem"); UrlHelper urlHelper = new UrlHelper(requestContext); string generatedUrl = null; if (!string.IsNullOrEmpty(navigationItem.RouteName)) { generatedUrl = urlHelper.RouteUrl(navigationItem.RouteName, routeValues); } else if (!string.IsNullOrEmpty(navigationItem.ControllerName) && !string.IsNullOrEmpty(navigationItem.ActionName)) { generatedUrl = urlHelper.Action(navigationItem.ActionName, navigationItem.ControllerName, routeValues); } else if (!string.IsNullOrEmpty(navigationItem.Url)) { generatedUrl = navigationItem.Url.StartsWith("~/", StringComparison.Ordinal) ? urlHelper.Content(navigationItem.Url) : navigationItem.Url; } else if (!routeValues.IsEmpty()) { generatedUrl = urlHelper.RouteUrl(routeValues); } return generatedUrl; }