如何使用ASP.NET MVC ApiController获取GET参数

时间:2012-05-18 17:03:29

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

我觉得这有点荒谬,但我找不到获取get请求参数的方法 例如/api/foo?sort=name

ApiController课程中,我给了public string Get()。放Get(string sort)会使/api/foo成为错误请求。 ApiController中的请求实例属于System.Net.Http.HttpRequestMessage类型。它没有QueryStringParameters属性或任何内容。

8 个答案:

答案 0 :(得分:26)

ApiController设计为在没有HttpContext对象的情况下工作(使其可移植,并允许它在IIS之外托管)。

您仍然可以访问查询字符串参数,但可以通过以下属性完成:

Request.GetQueryNameValuePairs()

以下是所有值的示例循环:

foreach (var parameter in Request.GetQueryNameValuePairs())
{
     var key = parameter.Key;
     var value = parameter.Value;
}

答案 1 :(得分:17)

你可以使用

HttpContext.Current.Request.QueryString

答案 2 :(得分:6)

这是一个从请求中获取查询字符串q并使用它来查询帐户的示例:

        var q = Request.GetQueryNameValuePairs().Where(nv => nv.Key =="q").Select(nv => nv.Value).FirstOrDefault();
        if (q != null && q != string.Empty)
        {
            var result = accounts.Where(a=>a.Name.ToLower().StartsWith(q.ToLower()));
            return result;
        }
        else
        {
            throw new Exception("Please specify a search query");
        }

这可以这样称呼:

URL / API /帐户?Q = P

答案 3 :(得分:3)

将所有查询字符串名称/值对都放入变量中:

IEnumerable<KeyValuePair<string, string>> queryString = request.GetQueryNameValuePairs();

然后提取指定的查询字符串参数

string value = queryString.Where(nv => nv.Key == "parameterNameGoesHere").Select(nv => nv.Value).FirstOrDefault();

答案 4 :(得分:2)

您还可以使用以下

var value = request.GetQueryNameValuePairs().Where(m => m.Key == "paramName").SingleOrDefault().Value;

答案 5 :(得分:0)

您是否正在尝试构建OData Web服务?如果是这样,只需返回一个IQueryable,Web API将完成其余的工作。

答案 6 :(得分:0)

如果我们有适合该请求的模型

例如

  public class JustModel 
    {
      public int Id {get;set;}
      public int Age {gets;set;}
    }

并像这样查询

/api/foo?id=1&Age=10

您可以使用[FromUri]属性

例如

public IHttpActionResult GetAge([FromUri] JustModel model){}

答案 7 :(得分:0)

添加默认值即可完成工作:

public string Get(string sort="")