3

したがって、私のデータモデルには次のようなものがあります。1人の著者が複数の本を関連付けることができるAuthor.Books。

次のルートで著者を取得できます:/ api / Authors / 4...そして/api/Booksのようなすべての本のリストまたは/api/ Books/8のような単一の本を取得できます

では、1人の著者のすべての本をどのように入手すればよいでしょうか。次のようなもの:/ Authors / 4/Booksその例の「/Books」部分を有効にするために何が必要かわかりません。BooksControllerを変更しますか(およびその方法)?またはAuthorsController?または... ?

4

1 に答える 1

2

WebApiの強力な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 に答える