在我的Web API的情况下,这个(默认)路由非常适用于几乎所有的控制器。
config.Routes.MapHttpRoute(
name: "DefaultRoute",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
和一对夫妇我的控制器,我希望让他们通过动作名称映射,就像这样:
config.Routes.MapHttpRoute(
name: "ActionRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
背景:
我大部分的控制器都在默认情况下被映射到GEE,POST,PUT和DELETE。 但是,我保留了一些“admin”的控制器,执行操作,如数据初始化,清理和测试的东西。 这些控制器可以具有经由GET excetude多个方法,因此第二路线。
如果我使用这些途径,他们的工作很好,但是,如果我同时设置,我得到的两次失败之一:
默认路由第一:
api/books/ -> OK
api/books/someGuidId -> OK
api/admin/someAdminAction -> 500 Internal Server Error (multiple actions found)
api/test/sometestAction -> 500 Internal Server Error (multiple actions found)
行动路线第一:
api/books/ -> OK
api/books/someGuidId -> 404 Not Found (no action that matches "someGuidId")
api/admin/someAdminAction -> OK
api/test/sometestAction -> OK
我的问题是:我怎么能有这些线路在同一时间锻炼吗?
[ 编辑 ]
API /书籍/ someGuidId不是一个重要的电话,我可以没有它(通过GET)但是,POST,PUT和DELETE,以相同的URL会失败,至极是不能接受的。