当前位置: 首页 > 知识库问答 >
问题:

如何在ASP.NET核心中为具有多个URIendpoint的资源实现REST API控制器?

常业
2023-03-14

假设我正在对blogging REST API建模,它有blogpostcomment资源。然后为blogpost资源添加以下URI:

/api/blogs
/api/blogs/{blogId}
/api/blogs/{blogId}/posts

由于应该避免深度嵌套,我为所有post创建了单独的endpoint,以便获取它们的注释`S:

/api/posts
/api/posts/{postId}
/api/posts/{postId}/comments

现在,由于post资源可以从两个不同的URI访问,如下所示:

  • /API/posts?blogid=123
  • /api/blogs/123/posts

我应该如何在ASP.NET Core API项目中实现这一点,而不会出现不必要的代码重复?

例如,我应该在同一个控制器的同一个动作中实现这两个endpoint,还是应该在两个控制器中分离这两个endpoint(例如,在PostsController中处理/API/posts?blogid=123和在BlogsController中处理/API/blogs/123/posts)?此外,我是应该在两个endpoint上实现postputdelete操作,还是只选择一个作为主URI?

在我了解了如何这样做之后,是否可以将相同的方法推广到具有相同类型关系的其他资源(例如postcomment)?

共有1个答案

穆招
2023-03-14

您应该为每个资源创建单独的控制器。这两个控制器可能共享的是PostService或其他获取post的机制。此外,请记住,如果您使用的是实体框架或其他ORM,文章可能会通过关系在Blog对象上公开。因此,您的操作可能非常简单:

public async Task<IActionResult> GetPostsForBlog(int blogId)
{
    return Ok(_context.Blogs.Find(blogId).Posts);
}
 类似资料: