C# 在C语言中,如何获得查询字符串的键值对,其中key应该是属性,value应该是与$symbol关联的变量
查询字符串的类型为:C# 在C语言中,如何获得查询字符串的键值对,其中key应该是属性,value应该是与$symbol关联的变量,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,查询字符串的类型为: filter[dummyId1]=like:$Id1&filter[dummyId2]=like:$Id2 我需要的是: key:dummyId1, Value:Id1 Key:dummyId2, Value:Id2 我该怎么做? 我尝试过使用HttpUtility.ParseQueryString和String.Split&,但是 两者都不能给出所需的结果。您可以使用正则表达式: /filter\[([a-zA-Z0-9]+)\]=([a-z]+):([\$a-
filter[dummyId1]=like:$Id1&filter[dummyId2]=like:$Id2
我需要的是:
key:dummyId1, Value:Id1
Key:dummyId2, Value:Id2
我该怎么做?
我尝试过使用HttpUtility.ParseQueryString和String.Split&,但是
两者都不能给出所需的结果。您可以使用正则表达式:
/filter\[([a-zA-Z0-9]+)\]=([a-z]+):([\$a-zA-Z0-9]+)/g
如果您需要更多支持的值,可以在brakets f.e.中添加选项:
[a-z]+更改为[a-zA-Z0-9]+以支持不仅仅是a-z。要测试您的查询,您可以使用:regex101.com,这非常有帮助
如何读取查询参数
好,编写一些示例
自动从[FromQuery]开始
迭代HttpUtility.ParseQueryString
NamedValueCollection Linq使用@Martin提供的正则表达式映射到列表
多了解一点就好了。你是怎么做到这一点的。有代码片段吗?你试过/听说过正则表达式或其他东西吗?在问题正文中,而不是在注释中,提供有关问题的额外信息。@Martin Regex对于这一点来说太复杂了,只能提取$associated variable name。我还需要密钥。看起来您正在跳过查询字符串中的一些重要信息。也就是说,filter[dummyId2]=like:$Id2不仅告诉您dummyId2对$Id2进行筛选,还告诉您应该使用like匹配,而不是相等匹配或startswith、endswith、大于、小于等@VikasSaraf,作为一个选项,我发布了一个可能的正则表达式作为答案:完整且更像aspnetcoreish示例。谢谢
[HttpGet("kvp")]
public ActionResult GetKvp([FromQuery] Dictionary<string, string> filter)
{
// This line will print {"dummyId1":"like:$Id1","dummyId2":"like:$Id2"}
System.Console.WriteLine(JsonSerializer.Serialize(filter)); //automagica fromquery
var parsed = HttpUtility.ParseQueryString(Request.QueryString.ToString());
foreach (string item in parsed)
{
// this will print filter[dummyId1] / filter[dummyId2]
System.Console.WriteLine(item);
// this will print like:$Id1 / like:Id2
System.Console.WriteLine(parsed.Get(item));
}
var kvps = parsed.AllKeys.Select(x =>
{
// Regex from @Martin answer
var key = Regex.Match(x, "filter\\[([a-zA-Z0-9]+)\\]");
var filterName = key.Groups[1].Value;
var value = parsed.Get(x);
var newValue = value.Replace("like:$", "", StringComparison.Ordinal);
return new KeyValuePair<string, string>(filterName, newValue);
}).ToList();
// this will print [{"Key":"dummyId1","Value":"Id1"},{"Key":"dummyId2","Value":"Id2"}]
System.Console.WriteLine(JsonSerializer.Serialize(kvps));
return Ok();
}