namespace lai_transfer.Common.Helper { public static class QueryStringHelper { public class ParseResult { public string Prefix { get; set; } public Dictionary Parameters { get; set; } public ParseResult() { Parameters = new Dictionary(); } // 获取字符串值 public string GetString(string key, string defaultValue = "") { return Parameters.TryGetValue(key, out string value) ? value : defaultValue; } // 获取布尔值 public bool GetBool(string key, bool defaultValue = false) { if (Parameters.TryGetValue(key, out string value)) { // 支持多种布尔值格式 string lowerValue = value.ToLower(); if (lowerValue == "true" || lowerValue == "1" || lowerValue == "yes") return true; if (lowerValue == "false" || lowerValue == "0" || lowerValue == "no") return false; } return defaultValue; } // 获取整数值 public int GetInt(string key, int defaultValue = 0) { if (Parameters.TryGetValue(key, out string value)) { if (int.TryParse(value, out int result)) return result; } return defaultValue; } // 获取长整数值 public long GetLong(string key, long defaultValue = 0) { if (Parameters.TryGetValue(key, out string value)) { if (long.TryParse(value, out long result)) return result; } return defaultValue; } // 获取双精度浮点数 public double GetDouble(string key, double defaultValue = 0.0) { if (Parameters.TryGetValue(key, out string value)) { if (double.TryParse(value, out double result)) return result; } return defaultValue; } // 尝试获取布尔值 public bool TryGetBool(string key, out bool result) { result = false; if (Parameters.TryGetValue(key, out string value)) { string lowerValue = value.ToLower(); if (lowerValue == "true" || lowerValue == "1" || lowerValue == "yes") { result = true; return true; } if (lowerValue == "false" || lowerValue == "0" || lowerValue == "no") { result = false; return true; } } return false; } } public static ParseResult Parse(string input) { var result = new ParseResult(); if (string.IsNullOrEmpty(input)) return result; // 找到第一个 ? 的位置 int firstQuestionMark = input.IndexOf('?'); if (firstQuestionMark == -1) { // 没有参数,整个字符串都是前缀 result.Prefix = input; return result; } // 提取前缀部分(第一个 ? 之前的内容) result.Prefix = input.Substring(0, firstQuestionMark); // 从第一个 ? 之后开始处理参数 string queryString = input.Substring(firstQuestionMark + 1); // 按 ? 分割参数 var pairs = queryString.Split('?'); foreach (var pair in pairs) { if (string.IsNullOrWhiteSpace(pair)) continue; var keyValue = pair.Split(new[] { '=' }, 2); if (keyValue.Length == 2) { result.Parameters[keyValue[0]] = keyValue[1]; } } return result; } } }