我在这里工作的第一个使用Web Api的MVC 4项目非常狂热。
在MVC 3中,我可以得到一个类似的查询字符串参数:
var unicornName = Request.Query["unicornName"];
但是在MVC 4中,看起来请求从HttpRequestBase
变为HttpRequestMessage
,并且查询参数不再存在。所以,嗯,好吧,我现在如何得到它们。我在网上发现了几个例子,但它们很荒谬。
This fellow recommends将“RequestUri”的查询字符串拆分为“&”并找到你的param和pair。 And this example显示在新请求对象上调用GetQueryNameValuePairs
方法,该方法返回键值对列表,然后执行一些linq以查找键和值。得到这么简单的东西真的不是倒退。请告诉我,我错过了什么!
注意:我可以理解它是模式绑定的方式,我应该通过action的方法参数引入查询字符串参数,但仍有时候需要拔出查询字符串变量(很容易?)来自请求,例如在过滤器中。
答案 0 :(得分:25)
我认为这可能就是你要找的东西,
var queryValues = Request.RequestUri.ParseQueryString();
答案 1 :(得分:5)
如果linq确实很麻烦,只需将GetQueryNameValuePairs()
的结果包装在字典中:
var requestQuery =
list.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
然后,您可以像以往一样获取字符串参数:
var unicornName = requestQuery["unicornName"];