/// <summary> /// Obtiene un diccionario poblado desde el componente Query de una Uri /// parseado segun el formato donde '&' separa registros y '=' separa /// la clave del valor. /// </summary> /// <remarks> /// En caso de parametros repetidos se sobreescribe al ultimo valor, si /// falta el caracter '=' se saltea dicho parametro. /// </remarks> /// <param name="uri"></param> /// <returns></returns> public static Dictionary <string, string> QueryToDictionary(this Uri uri) { try { var result = new Dictionary <string, string>(); var query = uri.GetComponents(UriComponents.Query, UriFormat.Unescaped); var nameValuePairs = query.TrimStart('?').Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var pair in nameValuePairs) { var vars = pair.Split('='); if (vars.GetLength(0) != 2) { SimpleTrace.Trace(typeof(ExtensionMethods).FullName, "QueryToDictionary, Invalid Query Format at pair '{0}' of '{1}'", pair, uri.Query); continue; } if (!result.ContainsKey(vars[0])) { result.Add(vars[0], vars[1]); } else { result[vars[0]] = vars[1]; } } return(result); } catch (Exception e) { SimpleTrace.Exception(typeof(ExtensionMethods).FullName, e, "Uri.QueryToDictionary"); return(null); } }
public static void RECORD(this object obj, string type, string inp, string outp, params object[] args) { SimpleTrace.Trace(typeof(ExtensionMethods).FullName, "{0}:{1,10} '{2}' '{3}' context: {4}", obj.NODE(), type, inp, outp, obj.CONTEXT(args)); }