我如何使用MVC4 WebAPI来链接控制器?

时间:2012-02-22 20:40:05

标签: asp.net-mvc-routing asp.net-mvc-4 asp.net-web-api

所以我的数据模型有这样的东西:Author.Books 单个作者可以拥有多个与之关联的图书。

我可以使用以下路线检索作者:/ api / Authors / 4 ...我可以获得所有书籍的列表:/ api / Books,或者像/ api / Books / 8这样的单书

那么我如何获得一位作者的所有书籍?类似于:/作者/ 4 /书籍 我不知道启用该示例的“/ Books”部分需要做些什么。我是否修改了BooksController(以及如何)?还是AuthorsController?或者......?

1 个答案:

答案 0 :(得分:2)

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

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

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

接下来,创建一个books控制器并公开返回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