lai_transfer/src/Common/Helper/QueryStringHelper.cs

133 lines
4.3 KiB
C#

namespace lai_transfer.Common.Helper
{
public static class QueryStringHelper
{
public class ParseResult
{
public string Prefix { get; set; }
public Dictionary<string, string> Parameters { get; set; }
public ParseResult()
{
Parameters = new Dictionary<string, string>();
}
// 获取字符串值
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;
}
}
}