所以我的数据模型有这样的东西:Author.Books
其中一个作者可以有多个与之关联的书籍。
我可以通过以下路线检索作者:/api/Authors/4
...我可以得到所有书籍的列表,例如:/api/Books,或者像/api/Books/8 这样的一本书
那么我如何才能获得一个作者的所有书籍呢?类似:/Authors/4/Books
我不知道需要做什么才能启用该示例的“/Books”部分。我是否修改 BooksController(以及如何修改)?还是 AuthorsController?或者... ?
最佳答案
您应该认真考虑使用 Web Api 的强大 Odata 翻译功能。它允许您直接在转换为 Linq 表达式的查询字符串中构建丰富的查询。这就是我将如何解决您的问题。
首先,确保您的图书模型具有 AuthorId 属性:
public class Book
{
public string Title{get; set;}
public int AuthorId{get; set;}
}
接下来,创建一个书籍 Controller 并公开返回 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
关于asp.net-mvc-routing - 我将如何使用 MVC4 WebAPI 来链接 Controller ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9402558/