如何在MVC 4的请求中获取查询字符串变量?

时间:2012-10-17 22:25:55

标签: asp.net-mvc-4 asp.net-web-api httprequest

我在这里工作的第一个使用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的方法参数引入查询字符串参数,但仍有时候需要拔出查询字符串变量(很容易?)来自请求,例如在过滤器中。

2 个答案:

答案 0 :(得分:25)

我认为这可能就是你要找的东西,

  var queryValues = Request.RequestUri.ParseQueryString();

https://stackoverflow.com/a/11729619/6819

答案 1 :(得分:5)

如果linq确实很麻烦,只需将GetQueryNameValuePairs()的结果包装在字典中:

var requestQuery = 
    list.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);

然后,您可以像以往一样获取字符串参数:

var unicornName = requestQuery["unicornName"];