这个问题与this one非常接近,但有一点小问题。
我想设置一个Web API路由表,以便我可以发出api/items/5
以及api/items/newest
之类的请求,以便客户端获取最新的项目。
我一直在翻阅some articles,但在确定我是否以正确的方式解决问题方面运气不佳。
我的第一个问题是,允许来电者找到最新item
的“正确”或“干净”方式是什么?可以做api/items/newest
之类的事情,还是不赞同?
目前,这似乎适用于我的WebApiConfig.cs文件:
config.Routes.MapHttpRoute(
name: "NewestItems",
routeTemplate: "api/items/newest",
defaults: new { controller = "Items" }
);
config.Routes.MapHttpRoute(
name: "ItemsById",
routeTemplate: "api/items/{id}",
defaults: new { controller = "Items" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这种方法有效,但我很好奇是否有一种更通用的方法来做这件事,而不需要制定特定于控制器的路由规则。我曾尝试过以下方法,但由于规则含糊不清,因此无效:
config.Routes.MapHttpRoute(
name: "ActionWithNoArgument",
routeTemplate: "api/{controller}/{action}",
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如果不采用特定于控制器的路由规则,是否有更有效的方法来执行此操作?
谢谢你们!
答案 0 :(得分:5)
config.Routes.MapHttpRoute(
name: "NewestItems",
routeTemplate: "api/{controller}/newest",
defaults: new { controller = "Items" }
);
config.Routes.MapHttpRoute(
name: "ItemsById",
routeTemplate: "api/items/{id}",
defaults: new { controller = "Items" }
);
路由自上而下处理,而{controller}
使其成为任何控制器的通用路径