我主要使用默认的WebApi路由映射,如下:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这工作正常,我的网址看起来像:
[GET] /api/customers Get all customers
[GET] /api/customers/1 Get a specific customer
[POST] /api/customers Create a customer
到目前为止一切都很好,但现在我想添加一个“搜索”工具。为此,我将发布一个表示搜索条件的对象,因为在 URL 上作为 GET 执行此操作的选项太多。我的计划是 URL 看起来像这样:
[POST] /api/customers/search
但是,使用上面的默认路由,服务器抱怨“找到了与请求匹配的多个操作”,我认为这是因为我现在有两个接受 POST 数据的控制器方法(一个用于“创建”,一个用于“搜索” ),并且路由没有办法区分它们。
我尝试添加一个包含 {action} 组件的新路由映射,但这并没有解决问题 - 大概是因为 URL 对两个路由映射都有效。(我需要以某种方式阻止“/search”变体匹配默认路由图。
请问有什么建议吗?