在网页API默认路由是: /api/locations/123?days=5
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
但是,如果我想要的路线是这样的/api/locations/123/events?days=5
同时仍然能够击中LocationsController
像这样的路由/api/locations/123?state=md
控制器:
public class LocationsController : ApiController {
// GET api/locations/123/events?days=5
public IEnumerable<Event> GetEventsByDays(int idLocation, int days) {
// do stuff
}
// GET api/locations/123?state=md
public IEnumerable<Location> GetLocationsByState(string state) {
// do stuff
}
}
这里有真正的两个问题:
- 是否有意义有
LocationsController
返回事件或应该有应该是一个完全独立的控制器? - 在路线会如何
WebApiConfig
被设置为允许这样的路线?
你说的是大约两分型动物的事情:
路由
路由在ASP.NET MVC&网络API用于直接URL映射到一个控制器和/或操作。 这是为了可读性尤其有用,因为开发者可以专注于设计是人类可读的(例如,产品支持和搜索引擎索引)网址。 什么是这里重要的是,有一个路线和控制器之间不存在唯一的关系。 如果你想将映射相同的控制器/动作可以创建10路。
例如,你的两条路线可以是这样的
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{idLocation}/events/{days}",
defaults: new { id = RouteParameter.Optional }
);
还要注意的是/api/locations/123?state=md
不是缺省路由模板正确。 这是/api/locations/123
。 因为你必须在url一个额外的参数,你将执行GetLocationsByState。
调节器
它建议报告有每个控制器一个单一的责任心,并保持尽可能小。 你的业务逻辑应该在别处。
杰弗里·巴勒莫(洋葱架构的创建者)说
如果你不能在屏幕上看到一个ASP.NET MVC的操作方法,而无需滚动,你有问题
最后,因为你的一切,你可以做你想做的,而不注意,如果它是好还是坏。 难度不总是设置一个架构,但维护和遵守自己的规则。
我希望这能帮到您。 我想你是不是路由,以便familliar,所以不要犹豫,阅读介绍和操作选择 。
您可以为事件单独的控制器,如果你想操纵位置无关的事件。 请看看这是帮助。