Хорошо, есть несколько проблем с тем, что вы делаете. Попробуйте эти изменения:
1) Изменить АЯКС вызов на GET
, а не POST
$.ajax({type: 'GET', ...
ИЛИ изменить имя действия для Post(ProfileModel objProfileModel)
, но я думаю, что прибудет в этом случае более RESTful, как вы выполняют поиск.
2) Не помещайте свое действие как часть своего URL-адреса. Соглашения web-api route используют http-глагол, чтобы определить, какое действие использовать. Таким образом, если вы контроллер называется SearchWebApi
, Ваш URL будет просто так:
url: '/api/SearchWebApi/'
Двигателя маршрутизации будет выяснить, что прибудет пойдут на методе/действие с get
имени.
3) Наличие данных формы в теле должно быть в порядке. Но знайте, что вам может понадобиться явно сказать это, испачкать параметр:
GetUsersList([FromBody] ProfileModel objProfileModel)
EDIT:
Для решения вашего вопроса о нескольких методах ПОЛУЧИТЬ, я думаю, есть несколько вариантов.
«Соглашение» в Web Api заключается в том, что у вас будет отдельный контроллер для каждого ресурса. Таким образом, у вас будет контроллер изображения и отдельный контроллер пользователей. Таким образом, конфликт и URL еще не имеют смысла:
GET /api/images/
GET /api/users/
У вас может быть несколько методов Get на контроллере, но они не могут конфликтовать. Таким образом, вы увидите много контроллеров для ресурса, у которого есть Get, который возвращает коллекцию, и get, который по id, чтобы получить конкретный ресурс.
общественного HttpResponseMessage Get()
общественного HttpResponseMessage Get (интермедиат идентификатор)
Но на самом деле, все это сводится к тому, как вы хотите, чтобы указать свой API, и как определить маршруты. по умолчанию апи маршрут это:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Обратите внимание, что это не указывает действие. Если вы хотите разрешить несколько попаданий на один и тот же контроллер, вы можете просто добавить сегмент {action}
к URL-адресу, точно так же, как обычный Mvc.
config.Routes.MapHttpRoute(
name: "DefaultApiWithAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Привет, Ваш ответ решил мою проблему, один вопрос заключается в том, что согласно пункту 2), как вы уже упоминали ... почему нет необходимости передавать имя метода в URL-адресе?например, если у меня есть 2 метода (a) GetUsersList, b) GetImages) в контроллере WebApi, с извлечением данных, а затем какой из них будет вызываться без передачи имени метода в URL-адресе – user2734405
@ user2734405 Я добавил обновление к моему ответу на адрес ваш вопрос –