我一直在创建不仅仅针对单个对象的 api 控制器的方式可能会对您有所帮助。我从 John Papa 关于 PluralSight 的 SPA 演讲中获得了这种方法(我强烈建议将其用于学习单页应用程序)。他还在其中一个模块中介绍了这一点。
它有 2 个部分。
第 1 部分,设置路线以执行 2 个正常场景,然后为我想要的添加第 3 个:
// ex: api/persons
routes.MapHttpRoute(
name: ControllerOnly,
routeTemplate: "api/{controller}"
);// ex: api/sessionbriefs
// ex: api/persons/1
routes.MapHttpRoute(
name: ControllerAndId,
routeTemplate: "api/{controller}/{id}",
defaults: null, //defaults: new { id = RouteParameter.Optional } //,
constraints: new { id = @"^\d+$" } // id must be all digits
);
// ex: api/lookups/all
// ex: api/lookups/rooms
routes.MapHttpRoute(
name: ControllerAction,
routeTemplate: "api/{controller}/{action}"
);
第 2 部分,在查找控制器中(以 John Papa 为例),将 ActionName 属性添加到方法中:
// GET: api/lookups/rooms
[ActionName("rooms")]
public IEnumerable<Room> GetRooms()
{
return Uow.Rooms.GetAll().OrderBy(r => r.Name);
}
// GET: api/lookups/timeslots
[ActionName("timeslots")]
public IEnumerable<TimeSlot> GetTimeSlots()
{
return Uow.TimeSlots.GetAll().OrderBy(ts => ts.Start);
}