【问题标题】:Convert query string dictionary (or associative array) to dictionary [duplicate]将查询字符串字典(或关联数组)转换为字典 [重复]
【发布时间】:2013-01-31 18:41:23
【问题描述】:

我正在尝试接受表单的查询字符串

?param[key1]=value1&param[key2]=value2

并在 C# MVC 4 中将其转换为字典。这在 PHP 中是微不足道的,但我无法找到任何在 C# 中重现它的方法。

我知道我可以通过

?param=value1&param=value2

但这留下了订购问题,对我的目的几乎没有那么有用。

希望这不是框架的限制,我如何在 C# 中实现字典式转换?

澄清一下:我不打算将查询字符串转换为 NVC,而是将查询字符串参数转换为它们自己的 NVC。这不是像 ParseQueryString() 或 Request.QueryString 对象那么简单。

【问题讨论】:

  • 链接的“重复”答案没有正确回答这个问题,希望我可以投票重新打开它,但这对我来说在 2019 年仍然是一个问题,我还没有找到一个优雅的解决方案。

标签: c# dictionary asp.net-mvc-4 asp.net-web-api query-string


【解决方案1】:

您不能只使用 Asp.Net 为您提供的Request.QueryString 集合吗?由于您使用的是 MVC,它将位于您的控制器 ControllerContext 属性上(位于该对象的 HttpContext 属性上)。

【讨论】:

  • 如果是 MVC,它们应该是动作方法的参数。
  • @asawyer 说得好,但很高兴知道在哪里可以找到它,如果您正在创建自定义模型活页夹,您将能够从 ControllerContext 中获取它。
  • Request.QueryString NVC 包含可以像 qs["param[key1]"] 一样访问的键,而我希望以 qs["param"]["key1"] 的形式访问它们,虽然理想情况下我想直接访问 param["key1"]。
【解决方案2】:

我在这里修复了一些对你有用的代码,虽然不是最好的解决方案,但它应该可以工作。

   string basestring = "?param[key1]=value1&param[key2]=value2";
        string newstring = basestring.Replace("?", "").Replace("param[", "").Replace("]", "");
        var array = newstring.Split('&');
        var dictionary = new Dictionary<string, string>();
        foreach (var onestring in array)
        {
            var splitedstr = onestring.Split('=');
            dictionary.Add(splitedstr[0],splitedstr[1]);
        }

【讨论】:

  • 这也是我想到的解决方案,但感觉相当不雅。我希望可能会有一些类似于 MVC 管理查询字符串的自动解析,例如 ?param=value1&amp;param=value2
【解决方案3】:

你也可以试试这样的

    public ActionResult SubmitFormWithFormCollection(FormCollection parameters)
    {
        foreach (string param in parameters)
        {
            ViewData[param] = parameters[param];
        }

        return View();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-16
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多