我有一个非常标准的 WebApi,它执行一些基本的 CRUD 操作。
我正在尝试添加一些不同类型的查找,但不太确定应该如何完成。
这是我目前的 FoldersController
public class FoldersController : ApiBaseController
{
//using ninject to pass the unit of work in
public FoldersController(IApiUnitOfWork uow)
{
Uow = uow;
}
// GET api/folders
[HttpGet]
public IEnumerable<Folder> Get()
{
return Uow.Folders.GetAll();
}
// GET api/folders/5
public Folder Get(int id)
{
return Uow.Folders.GetById(id);
}
// POST api/folders
public HttpResponseMessage Post(Folder folder)
{
Uow.Folders.Add(folder);
Uow.Commit();
var response = Request.CreateResponse(HttpStatusCode.Created, folder);
// Compose location header that tells how to get this Folder
response.Headers.Location = new Uri(Url.Link(WebApiConfig.DefaultRoute, new { id = folder.Id }));
return response;
}
// PUT api/folders
public HttpResponseMessage Put(Folder folder)
{
Uow.Folders.Update(folder);
Uow.Commit();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
// DELETE api/folders/5
public HttpResponseMessage Delete(int id)
{
Uow.Folders.Delete(id);
Uow.Commit();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
}
我想做的是添加一个看起来像这样的方法
public IEnumerable<Folder> GetChildFolders(int folderID)
{
return Uow.Folders.GetChildren(folderID);
}
因为我已经有了标准的 Get 方法,所以我不太确定该怎么做。
我最初以为我可以添加一条新路线..类似
routes.MapHttpRoute(
name: "ActionAndIdRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: null,
constraints: new { id = @"^/d+$" } //only numbers for id
);
只需在我的方法中添加类似 ActionName 注释的内容[ActionName("GetChildren")]
但这并没有成功。
我在正确的轨道上吗?我如何在不添加另一个控制器的情况下做这样的事情?