Ответ 1
Вы можете просто использовать
HttpContext.Current.Request.QueryString
Я чувствую себя немного абсурдным, спрашивая об этом, но я не могу найти способ получить параметры для запроса на получение
/api/foo?sort=name
например.
В классе ApiController
я дал public string Get()
. Помещение Get(string sort)
делает /api/foo
плохим запросом. Экземпляр запроса в ApiController
имеет тип System.Net.Http.HttpRequestMessage
. Он не имеет свойства QueryString
или Parameters
или ничего.
Вы можете просто использовать
HttpContext.Current.Request.QueryString
ApiController предназначен для работы без объекта HttpContext (делает его переносимым и позволяет размещать его за пределами IIS).
Вы можете получить доступ к параметрам строки запроса, но это делается с помощью следующего свойства:
Request.GetQueryNameValuePairs()
Здесь приведен пример цикла для всех значений:
foreach (var parameter in Request.GetQueryNameValuePairs())
{
var key = parameter.Key;
var value = parameter.Value;
}
Вот пример, который вызывает запрос qu из запроса и использует его для запроса учетных записей:
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/Accounts? Д = р
Получите все пары имен/значений querystring в переменную:
IEnumerable<KeyValuePair<string, string>> queryString = request.GetQueryNameValuePairs();
Затем извлеките указанный параметр querystring
string value = queryString.Where(nv => nv.Key =="parameterNameGoesHere").Select(nv => nv.Value).FirstOrDefault();
Вы пытаетесь создать веб-сервис OData? Если это так, просто верните IQueryable, и веб-API сделает все остальное.
Вы также можете использовать следующие
var value = request.GetQueryNameValuePairs().Where(m => m.Key == "paramName").SingleOrDefault().Value;