我正在寻找有关使用 WebAPI 2 时最佳实践的意见和建议:
假设我有两个控制器(用户和书籍),并且想要接受这些路由:
/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]。
预先非常感谢!我一直在努力寻找针对常见情况的更好的解决方案和实践。
我喜欢将返回实体的所有路由放在同一个控制器上。所以 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 的路由都应该位于此控制器上。任何返回 Users 的路由都将放置在 UsersController 上。这帮助我们保持事情的组织和简化,因为路由属性可以放置在任何控制器上,您可以很容易地在任何控制器上定义任何路由,这使得追踪所有可能的路由变得困难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)