好的,您正在做的事情有一些问题。尝试以下更改:
1) 将您的 ajax 调用更改为 aGET
而不是 aPOST
$.ajax({type: 'GET', ...
或将您的操作名称更改为,Post(ProfileModel objProfileModel)
但我认为在这种情况下,当您进行搜索时,get 更加 RESTful。
2)不要将您的操作作为您的网址的一部分。web-api 路由约定使用 http 动词来确定要使用的操作。所以,如果你的控制器被调用SearchWebApi
,你的 url 就是这样的:
url: '/api/SearchWebApi/'
路由引擎将确定 get 将转到get
名称中的方法/操作。
3)将表单数据放在正文中应该没问题。但请注意,您可能需要通过标记参数来明确说明这一点:
GetUsersList([FromBody] ProfileModel objProfileModel)
编辑:
为了解决您关于多种 get 方法的问题,我想有几个选择。
Web Api 中的“约定”是每个资源都有一个单独的控制器。所以你会有一个图像控制器和一个单独的用户控制器。因此没有冲突和 url 仍然有意义:
GET /api/images/
GET /api/users/
一个控制器上可以有多个 Get 方法,但它们不能冲突。所以你会看到很多控制器的资源都有一个返回集合的 Get 和一个通过 id 获取特定资源的 get。
公共 HttpResponseMessage 获取()
公共 HttpResponseMessage 获取(int id)
但实际上,这一切都取决于您希望如何指定 API,以及如何定义路由。默认的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 }
);