WebApi l'ajout d'une autre Méthode Get

J'ai un assez standard WebApi qui fait de base des opérations CRUD.

Je suis en train d'ajouter quelques différents types de recherches, mais je suis pas tout à fait sûr de savoir comment c'est supposé être fait.

Voici mon FoldersController actuellement

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);
    }
}

ce que je voudrais faire est d'ajouter une méthode qui ressemble à quelque chose comme ceci

public IEnumerable<Folder> GetChildFolders(int folderID)
{
     return Uow.Folders.GetChildren(folderID);
}

Puisque j'ai déjà la norme Get en là, je ne suis pas tout à fait sûr de savoir comment le faire.

J'ai d'abord pensé que je pourrais juste ajouter une nouvelle route..quelque chose comme

routes.MapHttpRoute(
        name: "ActionAndIdRoute",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: null,
        constraints: new { id = @"^/d+$" } //only numbers for id
        );

Et la juste ajouter quelque chose comme un ActionName annotation ma méthode [ActionName("GetChildren")]

mais qui ne l'a pas volée.

Suis-je sur la bonne voie? Comment puis-je faire quelque chose comme ça, sans l'ajout d'un autre contrôleur?

Il suffit de googler un peu, cochez cette SORTE de réponse: stackoverflow.com/questions/10121152/... et à la suite de l'article: API Web: Mélange Traditionnel & Verbe-Base. Cela devrait répondre à toutes vos questions.

OriginalL'auteur Kyle Gobel | 2013-05-16