Подтвердить что ты не робот

Как получить параметры GET с помощью ASP.NET MVC ApiController

Я чувствую себя немного абсурдным, спрашивая об этом, но я не могу найти способ получить параметры для запроса на получение /api/foo?sort=name например.

В классе ApiController я дал public string Get(). Помещение Get(string sort) делает /api/foo плохим запросом. Экземпляр запроса в ApiController имеет тип System.Net.Http.HttpRequestMessage. Он не имеет свойства QueryString или Parameters или ничего.

4b9b3361

Ответ 1

Вы можете просто использовать

HttpContext.Current.Request.QueryString

Ответ 2

ApiController предназначен для работы без объекта HttpContext (делает его переносимым и позволяет размещать его за пределами IIS).

Вы можете получить доступ к параметрам строки запроса, но это делается с помощью следующего свойства:

Request.GetQueryNameValuePairs()

Здесь приведен пример цикла для всех значений:

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

Ответ 3

Вот пример, который вызывает запрос 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? Д = р

Ответ 4

Получите все пары имен/значений querystring в переменную:

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

Затем извлеките указанный параметр querystring

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

Ответ 5

Вы пытаетесь создать веб-сервис OData? Если это так, просто верните IQueryable, и веб-API сделает все остальное.

Ответ 6

Вы также можете использовать следующие

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