2014-02-18 2 views
1

У меня есть контроллер GET() для извлечения списка объектов. Я хочу передать параметр к действию, чтобы отфильтровать список объектов, возвращенных следующим образом:Контроллер Web API 2 не принимает параметры QueryString

Mysite.com/Users?nameContains=john 

Это мое определение действия:

public IEnumerable<object> Get(string nameContains) 
{ 
    // I want to use nameContains here 
} 

Я получаю сообщение об ошибке:

The requested resource does not support http method 'GET'.

Если я верну метод, чтобы не получить этот параметр, он работает.

+0

Попробуйте отправить как объект тела. Вы можете получить – Amit

+0

Как вы определяете свой маршрут? – ssilas777

+0

@AmitAgrawal Я бы предпочел не потому, что это не соответствовало бы лучшим практикам API RESTful. @ ssilas777 'config.Routes.MapHttpRoute ( название: "DefaultApi", routeTemplate: "API/{контроллер}/{ID}", по умолчанию: новый {ID = RouteParameter.Optional} );' –

ответ

1

Попробуйте

public IEnumerable<object> Get([FromUri] string nameContains) 
{ 
    // I want to use nameContains here 
} 

Кроме того, поскольку вы работаете в Web Api 2, вы можете использовать attribute routing

[Route("users")] 
public IEnumerable<object> Get([FromUri] string nameContains) 
{ 
+0

Пробовал, он не работает. Такая же ошибка. –

0

Вы можете добавить новый маршрут к WebApiConfig записей.

Например, ваше определение метода:

public IEnumerable<object> Get(string nameContains) 
{ 
    // I want to use nameContains here 
} 

добавить:

config.Routes.MapHttpRoute(
    name: "GetSampleObject", 
    routeTemplate: "api/{controller}/{nameContains}" 
); 

Затем добавить параметры в вызове HTTP:

GET //<service address>/Api/Data/test 

или использовать HttpUtility.ParseQueryString в методе

// uri: /Api/Data/test 
public IEnumerable<object> Get() 
{ 
    NameValueCollection nvc = HttpUtility.ParseQueryString(Request.RequestUri.Query); 
    var contains = nvc["nameContains"]; 
    // BL with nameContains here 
} 
+1

Не должно быть необходимости в этом. Отображение параметров запроса работает. –

1

Извините, это была моя ошибка, я использовал 2 параметра, и я не прошел один из них (и не назначил его значением по умолчанию), поэтому он возвратил ошибку. Приветствия.

Смежные вопросы