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();
}