我有一些动态查询字符串参数,我希望与IDictionary<string,string>
进行交互。我该怎么做?
我试过
public IHttpActionResult Get(FromUri]IDictionary<string, string> selections)
as suggested但是查询
/api/MyController?selections%5Bsub-category%5D=kellogs
它总是给我一个包含0项的字典。
我甚至不需要selections
前缀。我确实需要所有的查询字符串参数作为字典。我该怎么做以及为什么不能胜任上述工作?
答案 0 :(得分:57)
您可以使用HttpRequestMessage
上的GetQueryNameValuePairs
extension method将解析后的查询字符串作为键值对的集合。
public IHttpActionResult Get()
{
var queryString = this.Request.GetQueryNameValuePairs();
}
您可以创建一些进一步的扩展方法,使其可以使用,如下所述:WebAPI: Getting Headers, QueryString and Cookie Values
/// <summary>
/// Extends the HttpRequestMessage collection
/// </summary>
public static class HttpRequestMessageExtensions
{
/// <summary>
/// Returns a dictionary of QueryStrings that's easier to work with
/// than GetQueryNameValuePairs KevValuePairs collection.
///
/// If you need to pull a few single values use GetQueryString instead.
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
public static Dictionary<string, string> GetQueryStrings(
this HttpRequestMessage request)
{
return request.GetQueryNameValuePairs()
.ToDictionary(kv => kv.Key, kv=> kv.Value,
StringComparer.OrdinalIgnoreCase);
}
}
答案 1 :(得分:2)
除了nemesv提到的内容之外,您还可以为IDictionary<string,string>
创建自定义参数绑定,类似于我在此处显示的方法: