133 lines
4.3 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|