public static void LogRoute(TextWriter writer, string name, RouteLoggingInfo routeInfo) { writer.WriteLine("URL: {0} {1}", routeInfo.Url, routeInfo.HttpMethods); if (name != null) writer.WriteLine("NAME: {0}", name); if (routeInfo.Defaults != null && routeInfo.Defaults.Count > 0) { writer.WriteLine("DEFAULTS:"); foreach (var @default in routeInfo.Defaults) writer.WriteLine("- {0} = {1}", @default.Key, @default.Value); } if (routeInfo.Constraints != null && routeInfo.Constraints.Count > 0) { writer.WriteLine("CONSTRAINTS:"); foreach (var constraint in routeInfo.Constraints) writer.WriteLine("- {0} = {1}", constraint.Key, constraint.Value); } if (routeInfo.DataTokens != null && routeInfo.DataTokens.Count > 0) { writer.WriteLine("DATA TOKENS:"); foreach (var t in routeInfo.DataTokens) writer.WriteLine("- {0} = {1}", t.Key, t.Value); } writer.WriteLine(" "); writer.WriteLine(new String('-', 40)); writer.WriteLine(" "); }
public static void LogRoute(TextWriter writer, string name, RouteLoggingInfo routeInfo) { writer.WriteLine("URL: {0} {1}", routeInfo.Url, routeInfo.HttpMethods); if (name != null) { writer.WriteLine("NAME: {0}", name); } if (routeInfo.Defaults != null && routeInfo.Defaults.Count > 0) { writer.WriteLine("DEFAULTS:"); foreach (var @default in routeInfo.Defaults) { writer.WriteLine("- {0} = {1}", @default.Key, @default.Value); } } if (routeInfo.Constraints != null && routeInfo.Constraints.Count > 0) { writer.WriteLine("CONSTRAINTS:"); foreach (var constraint in routeInfo.Constraints) { writer.WriteLine("- {0} = {1}", constraint.Key, constraint.Value); } } if (routeInfo.DataTokens != null && routeInfo.DataTokens.Count > 0) { writer.WriteLine("DATA TOKENS:"); foreach (var t in routeInfo.DataTokens) { writer.WriteLine("- {0} = {1}", t.Key, t.Value); } } writer.WriteLine(" "); writer.WriteLine(new String('-', 40)); writer.WriteLine(" "); }
public static RouteLoggingInfo GetRouteInfo(string url, IDictionary <string, object> defaults, IDictionary <string, object> queryStringDefaults, IDictionary <string, object> constraints, IDictionary <string, object> queryStringConstraints, IDictionary <string, object> dataTokens) { var item = new RouteLoggingInfo { Url = url }; //************************ // Defaults var allDefaults = new Dictionary <string, object>(); allDefaults.Merge(defaults); allDefaults.Merge(queryStringDefaults); foreach (var @default in allDefaults) { var defaultValue = @default.Value.ToString(); item.Defaults.Add(@default.Key, defaultValue); } //************************ // Constraints var allConstraints = new Dictionary <string, object>(); allConstraints.Merge(constraints); allConstraints.Merge(queryStringConstraints); foreach (var constraint in allConstraints) { if (constraint.Value == null || constraint.Value is IInboundHttpMethodConstraint) { continue; } var regexRouteConstraint = constraint.Value as RegexRouteConstraintBase; if (regexRouteConstraint != null) { item.Constraints.Add(constraint.Key, regexRouteConstraint.Pattern); } else { var constraintValue = constraint.Value; var constraintDescriptions = new List <string>(); // Simple string regex constraint - from ASP.NET routing features if (constraintValue is string) { constraintDescriptions.Add(constraintValue.ToString()); } else { // Optional constraint - unwrap it and continue var optionalConstraint = constraintValue as IOptionalRouteConstraint; if (optionalConstraint != null) { constraintValue = optionalConstraint.Constraint; } // QueryString constraint - unwrap it and continue var queryStringConstraint = constraintValue as IQueryStringRouteConstraint; if (queryStringConstraint != null) { constraintValue = queryStringConstraint.Constraint; constraintDescriptions.Add("QueryStringRouteConstraint"); } // Compound constraint - join type names of the inner constraints var compoundConstraint = constraintValue as ICompoundRouteConstraint; if (compoundConstraint != null) { constraintDescriptions.AddRange(compoundConstraint.Constraints.Select(c => c.GetType().Name)); } else if (constraintValue != null) { // Single constraint type constraintDescriptions.Add(constraintValue.GetType().Name); } } item.Constraints.Add(constraint.Key, String.Join(", ", constraintDescriptions)); } } //************************ // DataTokens if (dataTokens != null) { foreach (var token in dataTokens) { if (token.Key.ValueEquals("namespaces")) { item.DataTokens.Add(token.Key, String.Join(", ", (string[])token.Value)); } else if (token.Key.ValueEquals("httpMethods")) { item.HttpMethods = String.Join(", ", (string[])token.Value); } else if (!token.Key.ValueEquals("actionMethod")) { item.DataTokens.Add(token.Key, token.Value.ToString()); } } } return(item); }
public static RouteLoggingInfo GetRouteInfo(string url, IDictionary<string, object> defaults, IDictionary<string, object> queryStringDefaults, IDictionary<string, object> constraints, IDictionary<string, object> queryStringConstraints, IDictionary<string, object> dataTokens) { var item = new RouteLoggingInfo { Url = url }; //************************ // Defaults var allDefaults = new Dictionary<string, object>(); allDefaults.Merge(defaults); allDefaults.Merge(queryStringDefaults); foreach (var @default in allDefaults) { var defaultValue = @default.Value.ToString(); item.Defaults.Add(@default.Key, defaultValue); } //************************ // Constraints var allConstraints = new Dictionary<string, object>(); allConstraints.Merge(constraints); allConstraints.Merge(queryStringConstraints); foreach (var constraint in allConstraints) { if (constraint.Value == null || constraint.Value is IInboundHttpMethodConstraint) continue; var regexRouteConstraint = constraint.Value as RegexRouteConstraintBase; if (regexRouteConstraint != null) { item.Constraints.Add(constraint.Key, regexRouteConstraint.Pattern); } else { var constraintValue = constraint.Value; var constraintDescriptions = new List<string>(); // Simple string regex constraint - from ASP.NET routing features if (constraintValue is string) { constraintDescriptions.Add(constraintValue.ToString()); } else { // Optional constraint - unwrap it and continue var optionalConstraint = constraintValue as IOptionalRouteConstraint; if (optionalConstraint != null) { constraintValue = optionalConstraint.Constraint; } // QueryString constraint - unwrap it and continue var queryStringConstraint = constraintValue as IQueryStringRouteConstraint; if (queryStringConstraint != null) { constraintValue = queryStringConstraint.Constraint; constraintDescriptions.Add("QueryStringRouteConstraint"); } // Compound constraint - join type names of the inner constraints var compoundConstraint = constraintValue as ICompoundRouteConstraint; if (compoundConstraint != null) { constraintDescriptions.AddRange(compoundConstraint.Constraints.Select(c => c.GetType().Name)); } else if (constraintValue != null) { // Single constraint type constraintDescriptions.Add(constraintValue.GetType().Name); } } item.Constraints.Add(constraint.Key, String.Join(", ", constraintDescriptions)); } } //************************ // DataTokens if (dataTokens != null) { foreach (var token in dataTokens) { if (token.Key.ValueEquals("namespaces")) { item.DataTokens.Add(token.Key, String.Join(", ", (string[])token.Value)); } else if (token.Key.ValueEquals("httpMethods")) { item.HttpMethods = String.Join(", ", (string[])token.Value); } else if (!token.Key.ValueEquals("actionMethod")) { item.DataTokens.Add(token.Key, token.Value.ToString()); } } } return item; }