コード例 #1
0
 public string CreateUrl(NavigationTarget target)
 {
     var route = FindRoute(target);
     var url = Scheme + route.UrlPattern;
     var props = target.GetType().GetPropertiesHierarchical();
     var routeVars = route.Segments.Where(x => x.IsVariable).Select(x => x.Name.ToLowerInvariant());
     foreach (var prop in props) {
         var value = Uri.EscapeDataString(prop.GetValue(target) + "");
         if (routeVars.Contains(prop.Name.ToLowerInvariant())) {
             url = url.Replace("{" + prop.Name.ToLowerInvariant() + "}", value);
         } else if (prop.PropertyType == typeof(string) || prop.PropertyType.GetTypeInfo().IsValueType) {
             url += url.Contains("?") ? "&" : "?";
             url += prop.Name.ToLowerInvariant() + "=" + value;
         }
     }
     return url;
 }
コード例 #2
0
ファイル: Router.cs プロジェクト: modulexcite/SolidNavigation
 public Route FindRoute(NavigationTarget target)
 {
     var route = _routes.FirstOrDefault(x => x.TargetType == target.GetType());
     if (route == null)
     {
         throw new Exception("No route for NavigationTarget: " + target.GetType().Name);
     }
     return route;
 }