我主要使用默认的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
到目前为止一切都很好,但现在我想添加一个“搜索”设施。为此,我将POST一个代表搜索条件的对象,因为在URL上有太多的选项可以作为GET。我的计划是URL看起来像这样:
[POST] /api/customers/search
然而,使用上面的默认路由,服务器抱怨“找到了与请求匹配的多个操作”,我认为这是因为我现在有两个接受POST数据的控制器方法(一个用于“创建”,一个用于“搜索”),路由无法区分它们。
我尝试添加一个包含{action}组件的新路由映射,但这并未解决问题 - 可能是因为该URL对两个路由映射都有效。 (我会以某种方式阻止“/ search”变体与匹配默认路由映射。
建议吗?
答案 0 :(得分:1)
如何添加以下路线:
routes.MapHttpRoute(
name: "SearchRouteName",
routeTemplate: "api/{controller}/search/{id}",
defaults: new { controller = "customers", id = RouteParameter.Optional }
);
在DefaultApi路由映射之前?