【问题标题】:Binding querystring values to a dictionary将查询字符串值绑定到字典
【发布时间】:2015-03-28 17:43:27
【问题描述】:

我正在使用 Web API(ASP.NET MVC 5 的一部分),我正在尝试将查询字符串值绑定到 Dictionary<int, bool>

我的 Web API 方法很简单:

[HttpGet]
[Route("api/items")]
public IQueryable<Item> GetItems(Dictionary<int, bool> cf)
{
    // ...
}

如果我尝试调用此 URL:

/api/items?cf[1009]=true&cf[1011]=true&cf[1012]=false&cf[1015]=true

参数cf 始终为null

如何通过 QueryString 将值字典传递给 Web API 方法?

【问题讨论】:

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


    【解决方案1】:

    当您想使用查询字符串参数传递字典(基本上是键值对)时,您应该使用如下格式: &amp;parameters[0].key=keyName&amp;parameters[0].value=keyValue

    在我的Action方法签名中,参数定义为:

    Dictionary<string,string> parameters
    

    希望这会有所帮助。

    在阅读了 Scott Hanselman 的 this post 之后,我自己就能够理解这一点。所以感谢斯科特!

    谢谢, 尼拉夫

    【讨论】:

    • 这是正确的答案,但我无法控制 URL,所以这对我不起作用(我无法附加 .key/.value) - 我最终只是手动遍历Request.Form 并手动解析结果。
    【解决方案2】:

    没有内置的方法可以做到这一点。在这种情况下,“cf[1009]”是参数的名称,而不是“cf”。您可以编写自己的查询字符串解析器来实现您所需要的。更好的签名是:

    /api/items?cf=1009&cf=1011&cf=1015
    

    然后你使用以下方法绑定它:

    public IQueryable<Item> GetItems(List<int> cf)
    {
        // ...
    }
    

    【讨论】:

    • 这不符合 OP 的要求。需要更多关于 cf 条目的信息:即“true”或“false”。
    【解决方案3】:

    您可以为您的字典创建一个 ModelBinder,如本文所述:

    https://stackoverflow.com/a/22708383

    【讨论】:

    • 虽然此链接可能会回答问题,但it is better 在此处包含答案的基本部分,并提供链接以供参考。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多