2015-05-16 2 views
-1

Я новичок в WebAPI, и у меня возникла проблема. Я использую API-контроллер, который содержит два метода Get. Один используется для GetAll, а другой - для получения данных на основе идентификатора. Теперь я хочу реализовать другой метод get, который принимает string и возвращает записи. Я сделал этот метод и называют, что он не работает, как мой маршрут был по умолчанию API маршрут, который был похож:Добавление пользовательского метода в WebAPI

config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); 

Когда я добавил новый маршрут назвать мой заказ GetMethod:

config.Routes.MapHttpRoute(name: "Custom", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }); 

I смог вызвать мой пользовательский , но теперь я теряю спокойный метод с параметрами id. Как использовать оба метода?

+0

Я также попытался использовать маршрутизацию атрибутов, как [Маршрут (api/controllername/action)] в верхней части метода, но он все еще не работает. –

ответ

0

Вы пробовали, используя свой второй маршрут только и называете

api/customer/get/1 
api/customer/getall/ 
api/customer/getmethod/one 

В выше, клиентом является контроллером имени. Вы должны заменить его.

Проверьте, есть ли у вас маршруты в файле webapiconfig.cs. Пожалуйста, refer этой статье для получения дополнительной помощи.

+0

Я пробовал это, я смог позвонить api/customer/get/1 и api/customer/getall, но для api/customer/getmethod/one я получаю ошибку "{" Сообщение ":" Запрос недействителен. ", «MessageDetail»: «Словарь параметров содержит нулевую запись для параметра« id »не-nullable типа« System.Int32 »для метода« CustomersProject.Models.BaseModel Get (Int32) »в« ClientProject.Controllers.BaseController'2 [ CustomersProject.Models.Customer, CustomersProject.ApiModel.CustomerApiModel]. Необязательный параметр должен быть ссылочным типом, нулевым типом или быть объявлен как необязательный параметр. "}" –

+0

Возможно, вам понадобится еще один маршрут, похожий на второй, но имеет ограничение сказать, что идентификатор имеет тип ' строка». Если оба метода делают то же самое, лучший дизайн будет состоять только в том, чтобы иметь только один GET, а клиент конвертирует идентификатор строки в int id и вызывает метод single get. –

+0

Проблема в том, что когда я добавил маршрут к web.config, мне нужно поместить этот маршрут выше маршрута по умолчанию. Затем я потерял службы, которые мне нужны, чтобы метод id был вызван как api/customer/1, метод getall быть api/customer и мой метод для поиска в качестве клиента/get/kashif, где kashif - это имя для поиска. –

0

Лучше не менять маршруты. Вы можете использовать Action Name, чтобы различать вызовы и добавлять дополнительные функции. Взгляните на этот ответ: How to add custom methods to ASP.NET WebAPI controller?

+0

я изменил свои маршруты по умолчанию и сделать мои методы выглядеть следующим образом ... [ActionName ("поиск")] [HttpGet] общественных виртуальный BaseModel Получить (имя строки) { возвращает новый BaseModel() {Success = правда }; } и звоните, как этот api/customer/search, но он все еще не работает –

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