2014-10-07 3 views
2

У меня есть следующие функции заголовка в контроллере WebAPI объявлен маршрут:WebAPI маршрутизации функции с несколькими дополнительными параметрами

[Route("page/{page}/{cityfilter?}/{statefilter?}/{organizationfilter?}")] 
public IEnumerable<Contact> GetContact(int page, string cityfilter = null, string statefilter = null, string organizationfilter = null) 
{ 
    ... 
} 

Проблема здесь в том, что я хочу, чтобы каждый параметр не является обязательным, так что я d хочу сделать запрос, который имеет либо фильтр cityfilter, statefilter, фильтр организации, два из них или три из них, а затем обрабатывается и маршрутизатор с помощью этой функции, но я не знаю, как я могу построить URI так, что, например, этот маршрут работает только для statefilter.

Как это сделать в WebAPI? Как я могу вызвать адрес ресурса, например, из JQuery Ajax?

спасибо.

+0

Нужно ли вам иметь необязательные параметры в URL-адресе? Есть ли проблема с их параметрами querystring? – elolos

+0

Я могу сделать вызов как querystring без проблем, но как же мне изменить заголовок моей функции WEBAPI для этого? Спасибо –

ответ

3

Поскольку параметры являются простыми типами (строками), они могут быть связаны либо с данными маршрута (путь URL), либо с строкой запроса. Таким образом, вы можете переместить необязательные параметры в строку запроса, и ваш маршрут будет соответствовать только параметру page.

[Route("page/{page}")]

Вот пример URL, который вы будете использовать для вызова этого действия из браузера или из вызова AJAX:

www.yourapidomain.com/page/1?cityfilter=aCityFilterString&statefilter=aStateFilterString&organizationfilter=anOrganizationFilter

Вы можете, конечно, пропустить какой-либо из дополнительного параметров или изменить их порядок.

Подпись действия может оставаться такой, как она есть в вашем примере.

Для получения дополнительной информации вы можете ознакомиться с parameter binding ASP.NET Web API.

+1

Спасибо, это решение сработало чудеса! –

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