gpt4 book ai didi

.net - Web API 如何处理嵌套资源?

转载 作者:行者123 更新时间:2023-12-04 12:26:23 25 4
gpt4 key购买 nike

在使用 WebAPI 2 时,我正在寻找有关最佳实践的建议和建议:

假设我有两个 Controller (用户和书籍),并且想要接受这些路由:

/users/{user_id}/books <= books owned by user_id

/books <= all books
/books/{book_id} <= book from id

具体处理/users/{user_id}/books 的最佳做法是什么?我正在处理 REST API 中的许多自定义路由,因此我在方法上使用 [RoutePrefix] 和 [Verb, Route]。

非常感谢!我一直在努力为常见情况找到更好的解决方案和实践。

最佳答案

我喜欢将返回实体的所有路由放在同一个 Controller 上。所以 BooksController 看起来像这样:

public sealed class BooksController : ApiController
{
//Ideally this Repository would be a dependency injected object
private readonly IRepository<Book> _repo = new BooksRepo();

[Route("books")]
[HttpGet]
public IQueryable<Book> GetAll()
{
return _repo.GetAll();
}

[Route("books/{bookId:int}")]
[HttpGet]
public Book GetById(int bookId)
{
return _repo.GetById(bookId);
}

[Route("users/{userId:int}/books")]
[HttpGet]
public IQueryable<Book> GetBooksByUser(int userId)
{
return _repo.GetByUser(userId);
}

[Route("users/{userId:int}/books/{bookId:int}")]
[HttpGet]
public Book GetUsersBook(int userId, int bookId)
{
return _repo.GetByUser(userId).FirstOrDefault(book => book.Id == bookId);
}
}

现在任何返回 Books 的路由都应该在这个 Controller 上。任何返回用户的路由都将放置在 UsersController 上。这有助于我们保持组织和简化,因为 Route 属性可以放在任何 Controller 上,你可以很容易地在任何 Controller 上定义任何路由,这使得追踪所有可能的路由变得困难。

关于.net - Web API 如何处理嵌套资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com