private static RouteValidationResult MustHaveActionSegment(Segment[] segments, RouteValueDictionary defaults, RouteValueDictionary constraints)
        {
            var hasController = segments.OfType <ParameterSegment>().Any(x => x.ParameterName == "action") ||
                                defaults.GetOrDefault <object>("action") != null;

            return(hasController
                ? RouteValidationResult.Successful()
                : RouteValidationResult.Failure("The route does not contain an '{action}' segment, and no default action was provided."));
        }
        private static RouteValidationResult MustHaveViewModelSegment(Segment[] segments, RouteValueDictionary defaults, RouteValueDictionary constraints)
        {
            var hasViewModel = segments.OfType <ParameterSegment>().Any(x => x.ParameterName == "viewModel") ||
                               defaults.GetOrDefault <object>("viewModel") != null;

            return(hasViewModel
                ? RouteValidationResult.Successful()
                : RouteValidationResult.Failure("The route does not contain a '{viewModel}' segment, and no default ViewModel type was provided."));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="InvalidRouteException"/> class.
 /// </summary>
 /// <param name="route">The route.</param>
 /// <param name="result">The result.</param>
 /// <param name="message">The message.</param>
 public InvalidRouteException(IRoute route, RouteValidationResult result, string message) : base(message)
 {
     this.route  = route;
     this.result = result;
 }