【问题标题】:How to get query string variables in MVC 4's Request?如何在 MVC 4 的请求中获取查询字符串变量?
【发布时间】:2012-10-17 22:25:55
【问题描述】:

我很高兴在这里使用 Web Api 品种处理我的第一个 MVC 4 项目。

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

var unicornName = Request.Query["unicornName"];

但在 MVC 4 中,请求似乎从 HttpRequestBase 变为 HttpRequestMessage,并且不再有 Query 参数。所以,嗯,好吧,我现在如何得到它们。我在网上找到了几个例子,但它们很荒谬。

This fellow recommends 用“&”分割 RequestUri 的查询字符串并找到你的参数和配对。 And this example 显示在返回键值对列表的新请求对象上调用 GetQueryNameValuePairs 方法,然后执行一些 linq 来查找您的键和值。要得到如此简单的东西,真的不可能如此倒退。请告诉我我遗漏了什么!

注意:我可以理解它正在走模型绑定的方式,我应该通过操作的方法参数引入查询字符串参数,但仍然有需要提取查询字符串变量的时候(很容易?)来自请求,例如在过滤器中。

【问题讨论】:

  • 使用键/值对列表有什么问题?对我来说听起来很合理。
  • 哇.. 我想我没有错过任何东西。我猜这是一个回归问题。您更愿意使用什么,request["blah"] 或 request.GetQueryNameValuePairs().ToDictionary(e => e.Key, e => e.Value)["blah"]?
  • 似乎 Request.QueryString["query-string-name"] 又回到了 MVC 5 中,我自己尝试了一下,一切都像魅力一样。

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


【解决方案1】:

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

  var queryValues = Request.RequestUri.ParseQueryString();

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

【讨论】:

    【解决方案2】:

    如果 linq 真的那么麻烦,只需将 GetQueryNameValuePairs() 的结果包装在字典中即可:

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

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

    var unicornName = requestQuery["unicornName"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 2014-07-19
      • 2012-03-06
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多