Как бы я использовал MVC4 WebAPI для цепочки контроллеров? - PullRequest
3 голосов
/ 23 февраля 2012

Таким образом, моя модель данных имеет что-то вроде этого: Author.Books, где с одним Автором может быть связано несколько Книг.

Я могу получить Автор по этому маршруту: / api / Authors / 4 ..и я могу получить список всех книг, таких как: / api / Books, или одну книгу, такую ​​как / api / Books / 8

Так как бы мне получить все книги для одного автора?что-то вроде: / Авторы / 4 / Книги Я не знаю, что должно произойти, чтобы включить часть "/ Книги" в этом примере.Я изменяю BooksController (и как)?Или AuthorsController?Или ...?

1 Ответ

2 голосов
/ 23 февраля 2012

Вы должны серьезно рассмотреть возможность использования мощных возможностей перевода веб-интерфейсов Odata. Это позволяет вам создавать расширенные запросы непосредственно в строке запроса, которые переводятся в выражение Linq. Вот как бы я решил твою проблему.

Сначала убедитесь, что модель вашей книги имеет свойство AuthorId:

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

Затем создайте контроллер books и предоставьте метод Get, который возвращает IQueryable:

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
...