c# - 在 C# 中,如何获取查询字符串的键值对,其中键应该是属性,值应该是与 $ 符号关联的变量
问题描述
查询字符串的类型为:
filter[dummyId1]=like:$Id1&filter[dummyId2]=like:$Id2
我需要的是:
键:dummyId1,值:Id1 键:dummyId2,值:Id2
我怎样才能做到这一点?我试过使用HttpUtility.ParseQueryString()
and String.Split("&")
,但都没有给出想要的结果。
解决方案
你读的query params
怎么样?
好的,编写了一些示例
- 自动从
[FromQuery]
- 迭代
HttpUtility.ParseQueryString
NamedValueCollection
Linq 映射到List<KeyValuePair<string, string>>
@Martin 提供的使用正则表达式
[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();
}
推荐阅读
- javascript - 无法显示验证码图像。获取方形缩略图而不是验证码图像(核心 PHP)
- javascript - 有什么方法可以读取在 JS 中以编程方式打印到控制台的内容?(用于检测)
- javascript - 如何传递反应列表项以作为 onClick 的参数
- python - 在 ctypes 中部分定义 Struct 定义
- javascript - D3 JS条形图,在条形顶部显示y轴标签值
- design-patterns - 没有 dbcontext 时的工作单元模式
- javascript - 如何从给定的外部 url 获取数据 Seesion id 和所有,而不是来自我的应用程序(路由)在 Angular 6
- xamarin - xamarin.ios 在外部单击时不会关闭 UIAlertController
- c# - 有没有办法从 ASP.NET Core IFileProvider 类中检索 HttpContext?
- python - Django Admin 中是否有“DetailView”?