3

所以我的数据模型是这样的: Author.Books 一个作者可以有多个与之关联的书。

我可以通过以下路线检索作者:/api/Authors/4 ... 我可以获取所有书籍的列表,例如:/api/Books,或者像 /api/Books/8 这样的一本书

那么我怎样才能得到一个作者的所有书籍呢?类似:/Authors/4/Books 我不知道要启用该示例的“/Books”部分需要做什么。我是否修改 BooksController(以及如何修改)?还是 AuthorsController?或者... ?

4

1 回答 1

2

您应该认真考虑使用 Web Api 的强大 Odata 转换功能。它允许您直接在查询字符串中构建丰富的查询,这些查询被转换为 Linq 表达式。这就是我将如何解决您的问题。

首先,确保您的图书模型具有 AuthorId 属性:

public class Book
{
    public string Title{get; set;}
    public int AuthorId{get; set;}
}

接下来,创建一个书籍控制器并公开返回 IQueryable 的 Get 方法:

public class BooksController : ApiController
{
    public IQueryable<Books> Get()
    {
        var books = new List
        {
            new Book{Title = "Book 1", AuthorId = 1},
            new Book{Title = "Book 2", AuthorId = 2},
        };

        return books.AsQueryable();

    }
}

最后,要查询特定作​​者的书,您的 URI 将如下所示:

/books?$filter=AuthorId eq 2
于 2012-02-22T21:53:34.170 回答