如何从 HttpUtility.ParseQueryString 中提取特定案例字段?
How to extract specific-case fields from HttpUtility.ParseQueryString?
.net 标准库函数 System.Web.HttpUtility.ParseQueryString 将查询字符串解析为 name/value 对。
var a = HttpUtility.ParseQueryString("abc=123&def=456");
var x = a["abc"]; /* "123" */
当有两个名称相同但大小写不同的字段时,返回的对象将两个值用逗号组合在一起。
var a = HttpUtility.ParseQueryString("abc=123&ABC=456");
var x = a["abc"]; /* "123,456" */
如何单独取出 "abc" 部分?希望无需重写解析器或预处理字符串。
Hopefully without rewriting the parser or pre-processing the string.
我不认为这是可能的,但这里有一个稍微简洁的实现应该可以解决问题:
string pattern = @"(?<=^|&)(\w+)(?==)=(\w+)(?=&?)";
string input = @"abc=123&ABC=456&abc=789";
Dictionary<string, string> parameters = new Dictionary<string, string>();
foreach (Match m in Regex.Matches(input, pattern))
{
if (parameters.ContainsKey(m.Groups[1].Value))
{
//preserve original behaviour, i.e. concat values of same parameters
parameters[m.Groups[1].Value] = parameters[m.Groups[1].Value] + "," + m.Groups[2].Value;
} else
{
parameters.Add(m.Groups[1].Value, m.Groups[2].Value);
}
}
使用 a-zA-Z0-9_
之外的 Unicode 参数可能会失败,因此您可能需要编辑正则表达式以满足您的需要。
使用 parseQuerystring 不可能有两个名称相同但大小写不同的键,因为它的 return 类型是 NameValueCollection,其默认行为是提供唯一键的集合,如果您尝试在此添加相同的键默认情况下,它将添加的集合以逗号分隔,并与现有键值分隔。
如果有帮助请告诉我。
.net 标准库函数 System.Web.HttpUtility.ParseQueryString 将查询字符串解析为 name/value 对。
var a = HttpUtility.ParseQueryString("abc=123&def=456");
var x = a["abc"]; /* "123" */
当有两个名称相同但大小写不同的字段时,返回的对象将两个值用逗号组合在一起。
var a = HttpUtility.ParseQueryString("abc=123&ABC=456");
var x = a["abc"]; /* "123,456" */
如何单独取出 "abc" 部分?希望无需重写解析器或预处理字符串。
Hopefully without rewriting the parser or pre-processing the string.
我不认为这是可能的,但这里有一个稍微简洁的实现应该可以解决问题:
string pattern = @"(?<=^|&)(\w+)(?==)=(\w+)(?=&?)";
string input = @"abc=123&ABC=456&abc=789";
Dictionary<string, string> parameters = new Dictionary<string, string>();
foreach (Match m in Regex.Matches(input, pattern))
{
if (parameters.ContainsKey(m.Groups[1].Value))
{
//preserve original behaviour, i.e. concat values of same parameters
parameters[m.Groups[1].Value] = parameters[m.Groups[1].Value] + "," + m.Groups[2].Value;
} else
{
parameters.Add(m.Groups[1].Value, m.Groups[2].Value);
}
}
使用 a-zA-Z0-9_
之外的 Unicode 参数可能会失败,因此您可能需要编辑正则表达式以满足您的需要。
使用 parseQuerystring 不可能有两个名称相同但大小写不同的键,因为它的 return 类型是 NameValueCollection,其默认行为是提供唯一键的集合,如果您尝试在此添加相同的键默认情况下,它将添加的集合以逗号分隔,并与现有键值分隔。
如果有帮助请告诉我。