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

Lev*_*kon 10 httprequest asp.net-mvc-4 asp.net-web-api

我在这里工作的第一个使用Web Api的MVC 4项目非常狂热.

在MVC 3中,我可以获得如下的查询字符串参数:

var unicornName = Request.Query["unicornName"];
Run Code Online (Sandbox Code Playgroud)

但是在MVC 4中,看起来Request从a HttpRequestBase变为a HttpRequestMessage而Query参数不再存在.所以,嗯,好吧,我现在如何得到它们.我在网上发现了几个例子,但它们很荒谬.

这位老师建议将RequestUri的查询字符串拆分为"&"并找到你的param和pair.这个例子显示了GetQueryNameValuePairs在新请求对象上调用一个方法,它返回一个键值对列表,然后做一些linq来找到你的键和值.得到这么简单的东西真的不是倒退.请告诉我,我错过了什么!

注意:我可以理解它是模型绑定的方式,我应该通过action的方法参数引入查询字符串参数,但是仍然有时需要从Request中提取查询字符串变量(很容易?),例如在过滤器中.

Dar*_*ler 25

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

  var queryValues = Request.RequestUri.ParseQueryString();
Run Code Online (Sandbox Code Playgroud)

/sf/answers/821073361/


Rob*_*vey 5

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

var requestQuery = 
    list.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
Run Code Online (Sandbox Code Playgroud)

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

var unicornName = requestQuery["unicornName"];
Run Code Online (Sandbox Code Playgroud)