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

xst*_*ter 26 api asp.net-mvc 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属性或任何东西.

Dar*_*ren 30

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

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

Request.GetQueryNameValuePairs()
Run Code Online (Sandbox Code Playgroud)

这是一个循环遍历所有值的示例:

foreach (var parameter in Request.GetQueryNameValuePairs())
{
     var key = parameter.Key;
     var value = parameter.Value;
}
Run Code Online (Sandbox Code Playgroud)

  • GetQueryNameValueParirs()在Request对象上不可用.它在"使用System.Net.Http;"之后工作. (3认同)

Jos*_*uch 19

你可以使用

HttpContext.Current.Request.QueryString
Run Code Online (Sandbox Code Playgroud)

  • 这在mvc3中的ApiController上下文中不起作用 (11认同)

Mar*_*ark 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");
        }
Run Code Online (Sandbox Code Playgroud)

这可以像这样调用:

URL/API /帐户] Q = P