我觉得这有点荒谬,但我找不到获取get请求参数的方法
例如/api/foo?sort=name
。
在ApiController
课程中,我给了public string Get()
。放Get(string sort)
会使/api/foo
成为错误请求。 ApiController
中的请求实例属于System.Net.Http.HttpRequestMessage
类型。它没有QueryString
或Parameters
属性或任何内容。
答案 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="")